DB2中存儲過程包括存儲過程頭和存儲過程體
存儲過程頭
create procedure sum(in p_a integer,
in p_b integer,
out p_s integer)
language sql
specific sum_ab
begin
set p_s = p_a + p_b;
end
a、名稱:模式加名稱,如:db2admin.reademp
b、參數:1 模式:in/out/inout
2 名稱:建議以P_開頭
3 數據類型
c、調用存儲過程,如:call sun(100,200,?)
d、刪除存儲過程 drop procedure sum(integer,integer,integer)
e、dynamic result sets指定了返回的最大結果集數目(后面跟數字)
f、contains sql (不含查詢和更新語句)
reads sql data:只含查詢語句
modifies sql data:含查詢和更新,限制最少
精確定義以上3項,可提高存儲過程執行性能
g、deterministic:對於相同的輸入參數,每次返回的結果都是相同的,結果集 放在內存中可以重用,因此可以提高運行性能;
not deterministic:缺省,不推薦
h、language sql/c/java 分別對應相應語言存儲過程
i、called on null input:當輸入參數為空值,過程依舊執行,缺省值
j、P昂然meter CCSID:Coded Character Set ID,定義了當字符類的數據傳入 和過程中輸出的編碼模式
存儲過程體:
1、declare 變量名 數據類型
2、流程控制
- CASE 根據對一個或多個條件的計算選擇執行路徑
- FOR 對於表中的每一行執行一個代碼塊
- GET DIAGNOSTICS 將關於前一個SQL語句的信息返回到一個SQL變量中
- GOTO 控制轉移到一個有標簽的塊(一個或者多個語句的塊,由一個唯一的 SQL名稱和冒號標識)
- IF 語句(ELSEIF、ELSE)
- ITERATE將流程控制傳遞到一個有標簽的循環的開頭
- LEAVE 使程序控制離開一個循環代碼塊
- LOOP 多次執行一個代碼塊,直到LEAVE,ITERATE或者GOTO語句控制離開
- REPEAT 重復執行一個代碼塊,直到指定的搜索條件返回真為止
- RETURN 控制從SQL過程返回給調用者
- SET 將一個值賦值給一個輸出變量或者SQL變量
- WHILE 在指定條件為真時重復執行一個代碼塊
創建:db2 -td@ -vf createSQLproc.db2
調用:db2 call 過程名(參數)
...
end@ (此處的@可替換成其他符號)