天地不仁,以万物为刍狗!
DB2 中游标的使用以及 存储过程的写法
上一篇 /
下一篇 2007-10-24 00:00:00
/ 个人分类:db2
问题1:ITPUB个人空间%O;r8r1K0a!~c.G
什么时候才会发生not found异常 ,以及db2中sqlcode的值是如何变化的?ITPUB个人空间"f1Tx$S0{7[oA
在db2中,一条select 语句也有可能发生not found异常,譬如
8C5h?R%L
\0declare sqlcode integer default 0;
cUP2O1jZ2~4b0declare sql_code integer default 0;ITPUB个人空间AM5_Wh
declare classCode varchar(40) ;
5~-?]E
G6mO0select app_class_code into classCode from kf_app_class where app_name='无效记录';ITPUB个人空间-l`3LJ~B9^+Q
_
set sql_code=sqlcode;
2c{h1BsR-`G
](}0如果此时没有检索到记录,那么sqlcode的值为100,有的话为0;
1F9PE,|(Yk0我们可以定义NOT FOUND 异常处理
oc\
L6C8jL0ITPUB个人空间[]mz4EsIn
declare sqlcode integer default 0;
-BA)|PL.c4J#l{e0declare sql_code integer default 0;
HJv"FV!x&A0declare classCode varchar(40) ;
ZRU-jOU:]W4{S0begin
U-g,c.`/T-g0declare continue handler for not found
z5~!B[3w-~?]P
v0beginITPUB个人空间,XY/iJ-m0UE8x
--注如果发生not found那么此时的sqlcode必定为100
o J)Z9}I0 set sql_code=sqlcode;/*在这里sqlcode的值为100;*/
V?1|;?oCpq(L0 --如果再次得到sqlcode的值那么它的值变为0
Ww7JFvB m*p$fL0 set sql_code=sqlcode;/*这里sqlcode变成了0,因为上一条语句执行成功了,那么sqlcode变成了0*/ITPUB个人空间#GS)Ts'Mx2_
end;
XQ1K(Jd%?
P*vF/X0select app_class_code into classCode from kf_app_class where app_name='无效记录';
8BOk4i&[
A0set sql_code=sqlcode;/*同理此时如果没有取到数据,那么会进declare continue handler ,返回后sqlcode的值也为0*/
`"a*dh[8f)K e^0end;ITPUB个人空间q8A
^'^4S+Q'bQ1w3\
所以我们可以通过两种方法来捕获和处理not foundITPUB个人空间WQ
MLnj
方法1:
%wj*k_!B5Cm"?f0
4P.H,zE^0beginITPUB个人空间v't6}.UeJ1oa
declare continue handler for not foundITPUB个人空间a.~nE5{y@
begin