PL/SQL(Procedural Language/SQL)是 Oracle 對標準 SQL 的程序化擴展,已深度整合於 Oracle 資料庫服務器及各類開發工具中。自 Oracle 6 版本起可靠支援,現已成為資料庫開發人員與 DBA 的核心技能。PL/SQL 並非獨立產品,而是內建於 Oracle 服務器的處理引擎:SQL 執行器負責單條 SQL 語句,而 PL/SQL 引擎則處理完整的程序區塊,並在其中委託 SQL 執行器處理嵌入的 SQL 語句。
PL/SQL 採用區塊結構,每個區塊分為三個區段:
DECLARE 開頭,定義變數、常數、游標及其資料型別與初始值(可選)。BEGIN 開頭,放置所有可執行陳述式,包含 SQL、流程控制、巢狀區塊等(必須)。EXCEPTION 開頭,處理執行期錯誤(可選)。每個陳述式以分號結束;區塊以 END 結束;註解使用 --。
變數名稱 資料型別 [NOT NULL] [:= 初始值];
NOT NULL 強制初始化。賦值方式:直接指定 := 或透過 SELECT ... INTO / FETCH ... INTO 從查詢結果賦值。
以 CONSTANT 關鍵字宣告,值在定義時給定且不可變更。
用於儲存影像、聲音等大型資料(上限 4GB),支援隨機存取:
操作需使用 DBMS_LOB 套件。
+ - * /= != > < >= <=LIKE, BETWEEN, IN, IS NULLAND, OR, NOTIF ... THEN ... END IF;IF ... THEN ... ELSE ... END IF;IF ... THEN ... ELSIF ... THEN ... ELSE ... END IF;EXIT 或 EXIT WHEN 跳出REVERSE 遞減標籤格式 <<label_name>> 可標示區塊或迴圈,GOTO label_name; 可跳轉,但限制從外層跳入內層。
內層區塊可存取外層變數;同名變數以內層為準;外層不可直接存取內層變數。
/ 執行EXECUTE(或 EXEC)呼叫;在另一 PL/SQL 區塊中呼叫則不需 EXECUTE掌握 PL/SQL 基礎語法、區塊結構、變數型別、流程控制與程式單元(Function/Procedure/Package/Trigger),即可開始編寫高效能的資料庫端應用邏輯,充分發揮 Oracle 資料庫的處理能力。