SQL 是第 4 代語言(4GL),非程序化、只描述「做什麼」;但複雜業務流程需要「怎麼做」的程序邏輯。PL/SQL 是第 3 代語言(3GL),程序化、支援變數、流程控制、模組化,彌補 SQL 的不足,實現複雜業務規則。
基本單位為 區塊,三段式結構:
DECLARE -- 宣告區(可選)
v_id NUMBER;
BEGIN -- 執行區(必須)
v_id := 100;
EXCEPTION -- 例外處理區(可選)
WHEN OTHERS THEN NULL;
END;
變數名 型別 [NOT NULL] [:= 初值];:=(非 =)NUMBER(p,s)、VARCHAR2(size)、DATE、BOOLEANIF-THEN-ELSE、IF-THEN-ELSIFLOOP-EXIT WHEN、WHILE、FOR i IN 1..10<<label>>、GOTO label(限制:不可從外層跳入內層)指向 DML 查詢結果集的指標,操作三步驟:
OPEN cursor_name;FETCH cursor_name INTO var1, var2;CLOSE cursor_name;亦可使用 FOR rec IN cursor_name LOOP ... END LOOP; 隱式管理。
| 類型 | 特徵 | 語法關鍵字 |
|---|---|---|
| Procedure | 無回傳值,執行動作 | |
| Function | 有回傳值,可用於 SQL | |
| Package | 封裝相關 Procedure/Function/變數,分 Spec 與 Body | |
| Trigger | 特定事件(DML/DDL/系統)自動觸發 |