日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
DB2存儲(chǔ)過(guò)程的異常處理器類(lèi)型有幾種?

以下的文章主要向大家講述的是DB2 存儲(chǔ)過(guò)程的異常處理方法,在DB2數(shù)據(jù)庫(kù)中,假如你要使用sqlcode,那么你就必須在DDL語(yǔ)句之前declare。這是我們大家都必須了解的,以下就是文章的主要內(nèi)容描述。

存儲(chǔ)過(guò)程異常的處理:

 
 
 
  1. DECLARE handler-type HANDLER FOR condition handler-action  

 

異常處理器類(lèi)型(handler-type)有以下幾種:

CONTINUE 在處理器操作完成之后,會(huì)繼續(xù)執(zhí)行產(chǎn)生這個(gè)異常語(yǔ)句之后的下一條語(yǔ)句。

EXIT 在處理器操作完成之后,存儲(chǔ)過(guò)程會(huì)終止,并將控制返回給調(diào)用者。

UNDO 在處理器操作執(zhí)行之前,DB2會(huì)回滾存儲(chǔ)過(guò)程中執(zhí)行的SQL操作。在處理器操作完成之后,存儲(chǔ)過(guò)程會(huì)終止,并將控制返回給調(diào)用者。

異常處理器可以處理基于特定SQLSTATE值的定制異常,或者處理預(yù)定義異常的類(lèi)。預(yù)定義的3種異常如下所示:

NOT FOUND 標(biāo)識(shí)導(dǎo)致SQLCODE值為+100或者SQLSATE值為02000的異常。這個(gè)異常通常在SELECT沒(méi)有返回行的時(shí)候出現(xiàn)。

SQLEXCEPTIOIN 標(biāo)識(shí)導(dǎo)致SQLCODE值為負(fù)的異常。

SQLWARNING 標(biāo)識(shí)導(dǎo)致警告異?;蛘邔?dǎo)致+100以外的SQLCODE正值的異常。

如果產(chǎn)生了NOT FOUND 或者SQLWARNING異常,并且沒(méi)有為這個(gè)異常定義異常處理器,那么就會(huì)忽略這個(gè)異常,并且將控制流轉(zhuǎn)向下一個(gè)語(yǔ)句。如果產(chǎn)生了SQLEXCEPTION異常,并且沒(méi)有為這個(gè)異常定義異常處理器,那么DB2 存儲(chǔ)過(guò)程就會(huì)失敗,并且會(huì)將控制流返回調(diào)用者。

以下示例聲明了兩個(gè)異常處理器。 EXIT處理器會(huì)在出現(xiàn)SQLEXCEPTION 或者SQLWARNING異常的時(shí)候被調(diào)用。EXIT處理器會(huì)在終止SQL程序之前,將名為stmt的變量設(shè)為"ABORTED",并且將控制流返回給調(diào)用者。UNDO處理器會(huì)將控制流返回給調(diào)用者之前,回滾存儲(chǔ)過(guò)程體中已經(jīng)完成的SQL操作。

清單3:異常處理器示例

 
 
 
  1. DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING SET stmt = 'ABORTED';   
  2. DECLARE UNDO HANDLER FOR NOT FOUND;  

 

如果預(yù)定義異常集不能滿(mǎn)足需求,就可以為特定的SQLSTATE值聲明定制異常,然后再為這個(gè)定制異常聲明處理器。語(yǔ)法如下:

清單4:定制異常處理器

 
 
 
  1. DECLARE unique-name CONDITION FOR SQLSATE 'sqlstate'  

 

處理器可以由單獨(dú)的存儲(chǔ)過(guò)程語(yǔ)句定義,也可以使用由BEGIN…END塊界定的復(fù)合語(yǔ)句定義。注意在執(zhí)行符合語(yǔ)句的時(shí)候,SQLSATE和SQLCODE的值會(huì)被改變,如果需要保留異常前的SQLSATE和SQLCODE,就需要在執(zhí)行復(fù)合語(yǔ)句的***個(gè)語(yǔ)句把SQLSATE和SQLCODE賦予本地變量或參數(shù)。

通常,我們會(huì)為DB2 存儲(chǔ)過(guò)程定義一個(gè)執(zhí)行狀態(tài)的輸出參數(shù)(例如:poGenStatus)。

 
 
 
  1. declare sqlcode integer default 0;   
  2. begin   
  3. declare continue handler for sqlexception set ret = sqlcode;   
  4. declare continue handler for sqlwarning set ret = sqlcode;   
  5. declare continue handler for not found set ret = sqlcode;   
  6. end ;  

異常的聲明

異常的處理

 
 
 
  1. if sqlcode< 0 or sqlcode= 100 then   
  2. set O_RetCod = RetCode;   
  3. set O_RetMsg = 'CLN02:產(chǎn)品實(shí)例關(guān)聯(lián)客戶(hù)過(guò)程出錯(cuò)!';   
  4. insert into LOG.OPER_LOG_TAB(PROC_NAME,OBJ_TAB,REGION_COD,OPER_COUNT,ERR_CODE,DATA_TIME,OPER_TIME)   
  5. values('P_DW_CLEAN','GLOBAL TEMP',0,0,retcode,CHAR(last_3_mon_time),current TIMESTAMP);   
  6. return;   
  7. else   
  8. set RetCode = 0;   
  9. end if;  

較好的實(shí)例:

 
 
 
  1. CREATE PROCEDURE divide ( IN numerator INTEGER,  
  2. IN denominator INTEGER,  
  3. OUT result INTEGER)  
  4. LANGUAGE SQL  
  5. BEGIN  
  6. DECLARE overflow CONDITION FOR SQLSTATE '22003';  
  7. DECLARE CONTINUE HANDLER FOR overflow  
  8. RESIGNAL SQLSTATE '22375';  
  9. IF denominator = 0 THEN  
  10. SIGNAL overflow;  
  11. ELSE  
  12. SET result = numerator / denominator;  
  13. END IF;   

以上的相關(guān)內(nèi)容就是對(duì)DB2 存儲(chǔ)過(guò)程異常處理方法的介紹,望你能有所收獲。


本文名稱(chēng):DB2存儲(chǔ)過(guò)程的異常處理器類(lèi)型有幾種?
文章起源:http://www.5511xx.com/article/dpohhdp.html