問題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ù),那么會進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:
定義了游標,怎么fecth一條記錄,怎么進行循環(huán)?
Q:定義了游標假設(shè)發(fā)生not found 異常,那么是在open cursorName的時候還是在fecth的時候發(fā)生異常?
A:檢驗游標中的數(shù)據(jù)是否取完或者有無記錄,應(yīng)該在fecth的時候,而不是發(fā)生在open cursorName的時候,
下面一個例子詳細的說明了游標使用過程
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;
Q: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;
當程序執(zhí)行exit handler異常處理后,那么會退出程序,不會在接著執(zhí)行,也就是
declare exit handler for sqlwaring,sqlexcption
begin
--處理異常
end;
sql語句1;
sql語句2;
執(zhí)行sql語句1發(fā)生異常,會進入 exit handler ,然后退出程序,不會在執(zhí)行 sql語句2
執(zhí)行sql語句1發(fā)生異常,會進入 exit handler ,然后退出程序,不會在執(zhí)行 sql語句2
只有注冊用戶登錄后才能發(fā)表評論。 | ||
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
![]() |
||
相關(guān)文章:
|
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|