PL/SQL 程式碼以「區塊」為基本單位,標準結構包含四個區段:
DECLARE
-- 宣告區:變數、型別、游標、區域子程序
BEGIN
-- 執行區:程序性陳述式與 SQL 敘述(唯一必要區段)
EXCEPTION
-- 例外處理區:錯誤處理陳述式
END;
; 結束。DECLARE 與 EXCEPTION 為選擇性區段;BEGIN ... END; 為必要區段。DECLARE
fmajor VARCHAR2(50) := 'Chemistry';
ffirstName VARCHAR2(30);
BEGIN
ffirstName := 'John';
DBMS_OUTPUT.PUT_LINE('Major: ' || fmajor || ', Name: ' || ffirstName);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
v_count NUMBER := 0; -- 變數帶初始值
c_pi CONSTANT NUMBER := 3.14159; -- 常數(不可變更)
v_name employees.last_name%TYPE; -- 錨定型別(參考資料表欄位型別)
v_rec employees%ROWTYPE; -- 記錄型別(對應整列)
-- 條件判斷
IF condition THEN
...
ELSIF condition2 THEN
...
ELSE
...
END IF;
-- 迴圈
FOR i IN 1..10 LOOP
...
END LOOP;
WHILE condition LOOP
...
END LOOP;
-- 顯式游標
CURSOR c_emp IS SELECT employee_id, last_name FROM employees;
v_emp c_emp%ROWTYPE;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO v_emp;
EXIT WHEN c_emp%NOTFOUND;
-- 處理 v_emp
END LOOP;
CLOSE c_emp;
END;
-- 隱式游標(FOR 迴圈自動開啟/關閉)
FOR rec IN (SELECT * FROM employees WHERE department_id = 10) LOOP
...
END LOOP;
BEGIN
...
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- 查無資料
WHEN TOO_MANY_ROWS THEN
-- 單列查詢回傳多列
WHEN OTHERS THEN
-- 捕捉所有其他例外
RAISE; -- 重新拋出
END;
BULK COLLECT 與 FORALL 提升效能。掌握區塊結構是撰寫健壯 PL/SQL 程式的基石,建議從簡單匿名區塊練習,逐步進階至預存程序、函數、套件開發。