SQL 屬於第四代語言 (4GL),非程序化、只描述「做什麼」不關心「怎麼做」。面對複雜業務流程,需第三代程序語言 (3GL) 處理細節。PL/SQL 為 Oracle 專屬程序化擴充,結合 SQL 資料操作與程序控制能力,實現複雜業務邏輯。
基本單位為 Block (區塊),包含三段:
/* 宣告區:DECLARE 開頭 */
DECLARE
v_id INTEGER;
v_name VARCHAR2(20);
CURSOR c_emp IS SELECT * FROM employee WHERE emp_id = 3;
/* 執行區:BEGIN 開頭 (必要) */
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO v_id, v_name;
EXIT WHEN c_emp%NOTFOUND;
END LOOP;
CLOSE c_emp;
DBMS_OUTPUT.PUT_LINE(v_name);
/* 例外處理區:EXCEPTION 開頭 (可選) */
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('無資料');
END;
PL/SQL 資料型態與 Oracle 資料庫欄位型態一一對應:
宣告語法:變數名 型態; (右向左閱讀)
v_id NUMBER;
v_name VARCHAR2(20);
指派運算子::= (非 =)
v_id := 5;
v_name := 'Tom';
IF ... THEN ... ELSIF ... ELSE ... END IF;LOOP ... EXIT WHEN ... END LOOP;、WHILE ... LOOP ... END LOOP;、FOR i IN 1..10 LOOP ... END LOOP;OPEN/FETCH/CLOSE 或 FOR rec IN cursor LOOP ... END LOOP; (隱式游標)。常用:DBMS_OUTPUT (除錯輸出)、UTL_FILE (檔案操作)、DBMS_SQL (動態 SQL)、DBMS_JOB (排程)。
掌握區塊結構、變數宣告、控制流程與游標操作,即具備 PL/SQL 開發基礎。下篇將透過實戰案例深化應用。