正在看的db2教程是:DB2編程序技巧 (四)。1.10 預防字段空值的處理 SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPT FROM DEPARTMENT COALESCE函數返回()中表達式列表中第一個不為空的表達式,可以帶多個表達式。 和oracle的isnull類似,但isnull好象只能兩個表達式。
1.11 取得處理的記錄數 declare v_count int; update tb_test set t1='0' where t2='2'; --檢查修改的行數,判斷指定的記錄是否存在 get diagnostics v_ count=ROW_COUNT; 只對update,insert,delete起作用. 不對select into 有效
1.12 從存儲過程返回結果集(游標)的用法 1、建一sp返回結果集 CREATE PROCEDURE DB2INST1.Proc1 ( ) LANGUAGE SQL result sets 2(返回兩個結果集) ------------------------------------------------------------------------ -- SQL 存儲過程 ------------------------------------------------------------------------ P1: BEGIN declare c1 cursor with return to caller for select market_code from tb_market_code; --指定該結果集用于返回給調用者 declare c2 cursor with return to caller for select market_code from tb_market_code; open c1; open c2; END P1
2、建一SP調該sp且使用它的結果集
CREATE PROCEDURE DB2INST1.Proc2 ( out out_market_code char(1)) LANGUAGE SQL ------------------------------------------------------------------------ -- SQL 存儲過程 ------------------------------------------------------------------------ P1: BEGIN
declare loc1,loc2 result_set_locator varying; --建立一個結果集數組 call proc1; --調用該SP返回結果集。 associate result set locator(loc1,loc2) with procedure proc1; --將返回結果集和結果集數組關聯 allocate cursor1 cursor for result set loc1; allocate cursor2 cursor for result set loc2; --將結果集數組分配給cursor fetch cursor1 into out_market_code; --直接從結果集中賦值 close cursor1;
END P1
3、動態SQL寫法 DECLARE CURSOR C1 FOR STMT1; PREPARE STMT1 FROM 'ALLOCATE C2 CURSOR FOR RESULT SET ?'; 4、注意: 一、 如果一個sp調用好幾次,只能取到最近一次調用的結果集。 二、 allocate的cursor不能再次open,但可以close,是close sp中的對應cursor。
1.13 類型轉換函數 select cast ( current time as char(8)) from tb_market_code
1.15 C存儲過程參數注意 create procedure pr_clear_task_ctrl( IN IN_BRANCH_CODE char(4),  
[1] [2] 下一頁
正在看的db2教程是:DB2編程序技巧 (四)。; IN IN_TRADEDATE char(8), IN IN_TASK_ID char(2), IN IN_SUB_TASK_ID char(4), OUT OUT_SUCCESS_FLAG INTEGER )
DYNAMIC RESULT SETS 0 LANGUAGE C PARAMETER STYLE GENERAL WITH NULLS(如果不是這樣,sql 的sp將不能調用該用c寫的存儲過程,產生保護性錯誤) NO DBINFO FENCED MODIFIES SQL DATA EXTERNAL NAME 'pr_clear_task_ctrl!pr_clear_task_ctrl'@