Oracle PL/SQL | Day 2 | 變數宣告

在網路上很少人在寫一些關於DB 的程式設計,這讓我在學習上很不方便,因此來寫這個學習筆記統整一下DB程式設計的技術,然而一般在學習程式我們會把最基礎的常數宣告、 if /else、, 判斷式、迴圈、異常處理學的滾瓜爛熟才開始學習進階的應用, 因此這邊我們 Day 2 來練習PL/SQL 的基礎內功。

範例 1 – Hello World

  • DBMS_OUTPUT.put_line : 可將內容輸出在 DBMS 輸出視窗中,方便Bebug 用
  • BEGIN : 程式開始撰寫前需要宣告的值 (不需要分號)
  • END: 程式結束位置( 記得要分號結尾)
BEGIN 
    DBMS_OUTPUT.put_line('hello world');
END;

範例 2 – PL/SQL 變數宣告

  • DECLARE : 如果要宣告變數需要在這個區塊內進行宣告如: 常數、指標。
  • number : 這個為 oracle 表欄位對應的 type , 需要什麼型態就宣告什麼。
  • || : 此為字串串接用 符號。
  • := : 賦予變數對應值用 。
DECLARE 
    v_age number(5);
BEGIN
    v_age := 30;
    DBMS_OUTPUT.put_line('你的年紀是' || v_age);
END;

範例 3 – 結合Oracle中的表應用

先建立一個表 名叫做 friuts

create table fruits
(
f_id varchar(10) not null,
s_id varchar(5) not null,
f_name varchar(10) not null,
f_price number(8,2) not null
);

匯入一些資料

insert into fruits (f_id, s_id, f_name, f_price) values ('a1', 101, '蘋果', '5.2');
insert into fruits (f_id, s_id, f_name, f_price) values ('a2', 102, '香蕉', '5.3');
insert into fruits (f_id, s_id, f_name, f_price) values ('a3', 103, '橘子', '5.4');
insert into fruits (f_id, s_id, f_name, f_price) values ('a4', 103, '西瓜', '5.5');
insert into fruits (f_id, s_id, f_name, f_price) values ('a5', 104, '椰子', '5.7');
insert into fruits (f_id, s_id, f_name, f_price) values ('a6', 105, '葡萄', '5.9');
commit;

查看看有沒有建立成功

select * from fruits
  • v_ss_id : 宣告一個變數, 透過 table fruits 的值 利用 select into 匯入
  • EXCEPTION : 假設發生錯誤程式會自動跳過來這邊
  • NO_DATA_FOUND & TOO_MANY_ROWS : Exception oracle 特定 Exception名稱
DECLARE
v_ss_id number(6);
BEGIN
SELECT S_ID into v_ss_id from fruits where fruits.f_name = '蘋果';
DBMS_OUTPUT.put_line('蘋果代碼為: ' || v_ss_id );
EXCEPTION
    WHEN NO_DATA_FOUND THEN 
        DBMS_OUTPUT.put_line('沒有找到對應代碼');
    WHEN TOO_MANY_ROWS THEN
        DBMS_OUTPUT.put_line('找到不只一筆');    
END;

將蘋果 改成蘋果 1 則會跳到Exception

DECLARE
v_ss_id number(6);
BEGIN
SELECT S_ID into v_ss_id from fruits where fruits.f_name = '蘋果1';
DBMS_OUTPUT.put_line('蘋果代碼為: ' || v_ss_id );
EXCEPTION
    WHEN NO_DATA_FOUND THEN 
        DBMS_OUTPUT.put_line('沒有找到對應代碼');
    WHEN TOO_MANY_ROWS THEN
        DBMS_OUTPUT.put_line('找到不只一筆');    
END;

參考書連結: link