DB2編程序技巧 (四)
更新時(shí)間:2007年03月06日 00:00:00 作者:
正在看的db2教程是:DB2編程序技巧 (四)。1.10 預(yù)防字段空值的處理
SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPT
FROM DEPARTMENT
COALESCE函數(shù)返回()中表達(dá)式列表中第一個(gè)不為空的表達(dá)式,可以帶多個(gè)表達(dá)式。
和oracle的isnull類似,但isnull好象只能兩個(gè)表達(dá)式。
1.11 取得處理的記錄數(shù)
declare v_count int;
update tb_test set t1='0'
where t2='2';
--檢查修改的行數(shù),判斷指定的記錄是否存在
get diagnostics v_ count=ROW_COUNT;
只對(duì)update,insert,delete起作用.
不對(duì)select into 有效
1.12 從存儲(chǔ)過(guò)程返回結(jié)果集(游標(biāo))的用法
1、建一sp返回結(jié)果集
CREATE PROCEDURE DB2INST1.Proc1 ( )
LANGUAGE SQL
result sets 2(返回兩個(gè)結(jié)果集)
------------------------------------------------------------------------
-- SQL 存儲(chǔ)過(guò)程
------------------------------------------------------------------------
P1: BEGIN
declare c1 cursor with return to caller for
select market_code
from tb_market_code;
--指定該結(jié)果集用于返回給調(diào)用者
declare c2 cursor with return to caller for
select market_code
from tb_market_code;
open c1;
open c2;
END P1
2、建一SP調(diào)該sp且使用它的結(jié)果集
CREATE PROCEDURE DB2INST1.Proc2 (
out out_market_code char(1))
LANGUAGE SQL
------------------------------------------------------------------------
-- SQL 存儲(chǔ)過(guò)程
------------------------------------------------------------------------
P1: BEGIN
declare loc1,loc2 result_set_locator varying;
--建立一個(gè)結(jié)果集數(shù)組
call proc1;
--調(diào)用該SP返回結(jié)果集。
associate result set locator(loc1,loc2) with procedure proc1;
--將返回結(jié)果集和結(jié)果集數(shù)組關(guān)聯(lián)
allocate cursor1 cursor for result set loc1;
allocate cursor2 cursor for result set loc2;
--將結(jié)果集數(shù)組分配給cursor
fetch cursor1 into out_market_code;
--直接從結(jié)果集中賦值
close cursor1;
END P1
3、動(dòng)態(tài)SQL寫(xiě)法
DECLARE CURSOR C1 FOR STMT1;
PREPARE STMT1 FROM
'ALLOCATE C2 CURSOR FOR RESULT SET ?';
4、注意:
一、 如果一個(gè)sp調(diào)用好幾次,只能取到最近一次調(diào)用的結(jié)果集。
二、 allocate的cursor不能再次open,但可以close,是close sp中的對(duì)應(yīng)cursor。
1.13 類型轉(zhuǎn)換函數(shù)
select cast ( current time as char(8)) from tb_market_code
1.14 存儲(chǔ)過(guò)程的互相調(diào)用
目前,c sp可以互相調(diào)用。
Sql sp 可以互相調(diào)用,
Sql sp 可以調(diào)用C sp,
但C sp 不可以調(diào)用Sql sp(最新的說(shuō)法是可以)
1.15 C存儲(chǔ)過(guò)程參數(shù)注意
create procedure pr_clear_task_ctrl(
IN IN_BRANCH_CODE char(4),
 正在看的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將不能調(diào)用該用c寫(xiě)的存儲(chǔ)過(guò)程,產(chǎn)生保護(hù)性錯(cuò)誤)
NO DBINFO
FENCED
MODIFIES SQL DATA
EXTERNAL NAME 'pr_clear_task_ctrl!pr_clear_task_ctrl'@
SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPT
FROM DEPARTMENT
COALESCE函數(shù)返回()中表達(dá)式列表中第一個(gè)不為空的表達(dá)式,可以帶多個(gè)表達(dá)式。
和oracle的isnull類似,但isnull好象只能兩個(gè)表達(dá)式。
1.11 取得處理的記錄數(shù)
declare v_count int;
update tb_test set t1='0'
where t2='2';
--檢查修改的行數(shù),判斷指定的記錄是否存在
get diagnostics v_ count=ROW_COUNT;
只對(duì)update,insert,delete起作用.
不對(duì)select into 有效
1.12 從存儲(chǔ)過(guò)程返回結(jié)果集(游標(biāo))的用法
1、建一sp返回結(jié)果集
CREATE PROCEDURE DB2INST1.Proc1 ( )
LANGUAGE SQL
result sets 2(返回兩個(gè)結(jié)果集)
------------------------------------------------------------------------
-- SQL 存儲(chǔ)過(guò)程
------------------------------------------------------------------------
P1: BEGIN
declare c1 cursor with return to caller for
select market_code
from tb_market_code;
--指定該結(jié)果集用于返回給調(diào)用者
declare c2 cursor with return to caller for
select market_code
from tb_market_code;
open c1;
open c2;
END P1
2、建一SP調(diào)該sp且使用它的結(jié)果集
CREATE PROCEDURE DB2INST1.Proc2 (
out out_market_code char(1))
LANGUAGE SQL
------------------------------------------------------------------------
-- SQL 存儲(chǔ)過(guò)程
------------------------------------------------------------------------
P1: BEGIN
declare loc1,loc2 result_set_locator varying;
--建立一個(gè)結(jié)果集數(shù)組
call proc1;
--調(diào)用該SP返回結(jié)果集。
associate result set locator(loc1,loc2) with procedure proc1;
--將返回結(jié)果集和結(jié)果集數(shù)組關(guān)聯(lián)
allocate cursor1 cursor for result set loc1;
allocate cursor2 cursor for result set loc2;
--將結(jié)果集數(shù)組分配給cursor
fetch cursor1 into out_market_code;
--直接從結(jié)果集中賦值
close cursor1;
END P1
3、動(dòng)態(tài)SQL寫(xiě)法
DECLARE CURSOR C1 FOR STMT1;
PREPARE STMT1 FROM
'ALLOCATE C2 CURSOR FOR RESULT SET ?';
4、注意:
一、 如果一個(gè)sp調(diào)用好幾次,只能取到最近一次調(diào)用的結(jié)果集。
二、 allocate的cursor不能再次open,但可以close,是close sp中的對(duì)應(yīng)cursor。
1.13 類型轉(zhuǎn)換函數(shù)
select cast ( current time as char(8)) from tb_market_code
1.14 存儲(chǔ)過(guò)程的互相調(diào)用
目前,c sp可以互相調(diào)用。
Sql sp 可以互相調(diào)用,
Sql sp 可以調(diào)用C sp,
但C sp 不可以調(diào)用Sql sp(最新的說(shuō)法是可以)
1.15 C存儲(chǔ)過(guò)程參數(shù)注意
create procedure pr_clear_task_ctrl(
IN IN_BRANCH_CODE char(4),
 正在看的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將不能調(diào)用該用c寫(xiě)的存儲(chǔ)過(guò)程,產(chǎn)生保護(hù)性錯(cuò)誤)
NO DBINFO
FENCED
MODIFIES SQL DATA
EXTERNAL NAME 'pr_clear_task_ctrl!pr_clear_task_ctrl'@
相關(guān)文章
使用SQL Server連接服務(wù)器訪問(wèn)DB2 Server
這篇文章主要介紹了使用SQL Server連接服務(wù)器訪問(wèn)DB2 Server,需要的朋友可以參考下2016-12-12Db2數(shù)據(jù)庫(kù)中常見(jiàn)的堵塞問(wèn)題分析與處理方法
IBM的DB2是關(guān)系數(shù)據(jù)庫(kù)的鼻祖,最近更加的深入了學(xué)習(xí)了,所以下面這篇文章主要給大家介紹了關(guān)于Db2數(shù)據(jù)庫(kù)中常見(jiàn)的堵塞問(wèn)題分析與處理方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。2018-04-04DB2 自動(dòng)遞增字段實(shí)現(xiàn)方法
DB2提供了當(dāng)有一行插入的時(shí)候自動(dòng)在某一列添加值的功能,可以使用所謂identity rules,簡(jiǎn)單點(diǎn)的比如某個(gè)數(shù)值的遞增填入該列中,當(dāng)然也有很復(fù)雜的。2009-11-11常見(jiàn)數(shù)據(jù)庫(kù)系統(tǒng)比較 DB2數(shù)據(jù)庫(kù)
常見(jiàn)數(shù)據(jù)庫(kù)系統(tǒng)比較 DB2數(shù)據(jù)庫(kù)...2007-03-03