首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

PL/SQL 區塊結構基礎入門:宣告、執行、例外處理與實作範例

     編輯:關於SqlServer

PL/SQL 區塊結構總覽

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;

進階結構元素

1. 變數與常數宣告

v_count    NUMBER := 0;           -- 變數帶初始值
c_pi CONSTANT NUMBER := 3.14159;  -- 常數(不可變更)
v_name     employees.last_name%TYPE; -- 錨定型別(參考資料表欄位型別)
v_rec      employees%ROWTYPE;       -- 記錄型別(對應整列)

2. 控制結構

-- 條件判斷
IF condition THEN
  ...
ELSIF condition2 THEN
  ...
ELSE
  ...
END IF;

-- 迴圈
FOR i IN 1..10 LOOP
  ...
END LOOP;

WHILE condition LOOP
  ...
END LOOP;

3. 游標

-- 顯式游標
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;

4. 例外處理

BEGIN
  ...
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    -- 查無資料
  WHEN TOO_MANY_ROWS THEN
    -- 單列查詢回傳多列
  WHEN OTHERS THEN
    -- 捕捉所有其他例外
    RAISE; -- 重新拋出
END;

實務建議

  1. 錨定型別(%TYPE/%ROWTYPE):避免資料表結構變更導致程式碼中斷。
  2. 例外處理不可空白:至少記錄錯誤日誌,避免靜默失敗。
  3. 使用隱式游標 FOR 迴圈:簡潔且自動管理開關,減少資源洩漏風險。
  4. 大量資料處理:考慮 BULK COLLECT 與 FORALL 提升效能。

掌握區塊結構是撰寫健壯 PL/SQL 程式的基石,建議從簡單匿名區塊練習,逐步進階至預存程序、函數、套件開發。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved