DB2 SQL PL(SQL Procedural Language)在存儲過程、觸發器與函數開發中藏有不少「隱性規則」。本文整理三大高頻實戰技巧,涵蓋建立語法細節、暫存表正確姿勢與單筆查詢最佳化。
-- 錯誤:CREATE 後接 TAB
create procedure my_proc()
-- 正確:只能用空格
create procedure my_proc()
編譯器對 TAB 字元敏感,會導致語法錯誤(SQL0104N)。養成「空格縮排」習慣,或在編輯器設定 `Tab → Spaces`。
declare global temporary table session.tmp_data (id int) with replace;
❌ 錯誤:`SELECT ... INTO` 搭配 `FETCH FIRST` 不被支援
-- 不合法
select market_code into v_market_code
from tb_market_code
fetch first 1 rows only;
✅ 正確:使用**游標 + FETCH FIRST** 模式
declare v_market_code char(1);
declare cursor1 cursor for
select market_code from tb_market_code
fetch first 1 rows only for update;
open cursor1;
fetch cursor1 into v_market_code;
close cursor1;
✅ 替代簡寫(無 FOR UPDATE 需求時):
set v_market_code = (select market_code from tb_market_code fetch first 1 rows only);
標量子查詢賦值在 DB2 V9.7+ 完整支援,碼更簡潔。

細節決定成敗:空格 vs TAB、Session 隔離、游標模式,都是從無數踩坑經驗煉出的鐵律。