ORACLE 存儲過程異常捕獲並拋出


 for tab_name in tables loop  
execute immediate 'drop table '||tab_name;  --此處可能會報錯
 end loop;

當前情況是,循環表,進行刪除,如果出現表不存在,則會異常中斷,導致整個存儲過程掛掉,需求是要能跳過錯誤的執行,不進行處理,進行下個循環。

 

最終代碼:

 

 for tab_name in tables loop  
begin

execute immediate 'drop table '||tab_name;  --此處可能會報錯

 EXCEPTION WHEN others THEN NULL; end;

 end loop;

 

 

如何拋出

上面存儲過程是,異常處理寫法是(異常跳過不處理): 

EXCEPTION 
WHEN OTHERS THEN 
END

這種寫法當存儲過程拋出異常時,我們不知道其到底拋出了哪種異常(比如列寬度不夠大而在插入數據時拋異常),可以按如下方式顯示異常信息 

EXCEPTION 
WHEN OTHERS THEN 
DBMS_OUTPUT.put_line(‘sqlcode : ’ ||sqlcode); 
DBMS_OUTPUT.put_line(‘sqlerrm : ’ ||sqlerrm); 
END

sqlcode是異常編號,sqlerrm是異常的詳細信息,如果異常信息太多,可以截取一段顯示,如 
DBMS_OUTPUT.put_line(‘sqlerrm : ’ ||substr(sqlerrm,1,100));是截取前100個字符顯示出來。
也可以插入到日志表
insert xxx  values (sqlcode,sqlerrm)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM