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.14 存儲過程的互相調用
目前,c sp可以互相調用。
Sql sp 可以互相調用,
Sql sp