成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

DB2中游標(biāo)的使用方法以及存儲過程的寫法

瀏覽:81日期:2023-11-09 17:15:12

問題1:

什么時候才會發(fā)生not found異常 ,以及db2中sqlcode的值是如何變化的?

在db2中,一條select 語句也有可能發(fā)生not found異常,譬如:

declare sqlcode integer default 0;

declare sql_code integer default 0;

declare classCode varchar(40) ;

select app_class_code into classCode from kf_app_class where app_name='無效記錄';

set sql_code=sqlcode;

如果此時沒有檢索到記錄,那么sqlcode的值為100,有的話為0;

我們可以定義NOT FOUND 異常處理

declare sqlcode integer default 0;

declare sql_code integer default 0;

declare classCode varchar(40) ;

begin

declare continue handler for not found

begin

--注如果發(fā)生not found那么此時的sqlcode必定為100

set sql_code=sqlcode;/*在這里sqlcode的值為100;*/

--如果再次得到sqlcode的值那么它的值變?yōu)?

set sql_code=sqlcode;/*這里sqlcode變成了0,因為上一條語句執(zhí)行成功了,那么sqlcode變成了0*/

end;

select app_class_code into classCode from kf_app_class where app_name='無效記錄';

set sql_code=sqlcode;/*同理此時如果沒有取到數(shù)據(jù),那么會進(jìn)declare continue handler ,返回后sqlcode的值也為0*/

end;

所以我們可以通過兩種方法來捕獲和處理not found

方法1:

begin

declare continue handler for not found

begin

--異常處理代碼

end;

sql語句

end;

方法2:

begin

sql語句

if sqlcode=100 then

--異常處理代碼

end if;

end;

問題2:

定義了游標(biāo),怎么fecth一條記錄,怎么進(jìn)行循環(huán)?

Q:定義了游標(biāo)假設(shè)發(fā)生not found 異常,那么是在open cursorName的時候還是在fecth的時候發(fā)生異常?

A:檢驗游標(biāo)中的數(shù)據(jù)是否取完或者有無記錄,應(yīng)該在fecth的時候,而不是發(fā)生在open cursorName的時候,

下面一個例子詳細(xì)的說明了游標(biāo)使用過程:

begin

declare sqlcode integer default 0;

declare app_code varchar(10);

declare cursor1 cursor for select app_code from kf_app_class ;

open cursor1;

cursorLoop:

loop

fecth cursor1 into app_code ;

if sqlcode=100 then leave cursorLoop;

end if;

end loop;

end;

sqlcode 可以直接用嗎?

A:在db2中,如果要使用sqlcode那么必須在使用前declare;

譬如

declare sqlcode integer default 0;

if sqlcode =? then

end if;

附注

db2的其他異常處理

對應(yīng) oracle的 when other exceptions

declare exit handler for sqlwaring,sqlexcption

begin

--處理異常

end;

當(dāng)程序執(zhí)行exit handler異常處理后,那么會退出程序,不會在接著執(zhí)行,也就是

declare exit handler for sqlwaring,sqlexcption

begin

--處理異常

end;

sql語句1;

sql語句2;

執(zhí)行sql語句1發(fā)生異常,會進(jìn)入 exit handler ,然后退出程序,不會在執(zhí)行 sql語句2

標(biāo)簽: DB2 數(shù)據(jù)庫