首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Oracle 函數變數初始化與 NULL 運算陷阱

     編輯:程式設計綜合問答

程式碼片段

v_sal emptype.salary%type := 0;      -- 显式初始化为 0
v_sal_sum emptype.salary%type;       -- 未初始化,隐含为 NULL

現象差異

  • v_sal 初始化為 0,迴圈累加 v_sal := v_sal + v_emp.salary 正常運作。
  • v_sal_sum 未初始化為 NULL,SELECT SUM(salary) INTO v_sal_sum 若查無資料仍為 NULL;後續 v_sal := v_sal / v_sal_sum 任何數除以 NULL 結果為 NULL,導致函數回傳 NULL(無輸出)。

核心規則

Oracle 中任何與 NULL 運算(算術、比較、串接)結果皆為 NULL。 變數宣告若未顯式賦值,預設為 NULL。

最佳實踐

  1. 宣告即初始化:v_sal_sum emptype.salary%type := 0;
  2. 使用 NVL/COALESCE 防禦:v_sal := v_sal / NVL(v_sal_sum, 1); 避免除以零或 NULL。
  3. 游標迴圈防呆:檢查 c_emp%ROWCOUNT 或 c_emp%NOTFOUND 確認有資料再計算。

教訓總結

「依賴隱性轉換或預設值」是資料庫程式設計大忌。所有變數在使用前必須顯式初始化,是編寫可靠 PL/SQL 的鐵律。

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