博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE 存储过程异常捕获并抛出
阅读量:6573 次
发布时间:2019-06-24

本文共 722 字,大约阅读时间需要 2 分钟。

for tab_name in tables loop  execute immediate 'drop table '||tab_name;  --此处可能会报错
end loop;

当前情况是,循环表,进行删除,如果出现表不存在,则会异常中断,导致整个存储过程挂掉,需求是要能跳过错误的执行,不进行处理,进行下个循环。

 

最终代码:

 

for tab_name in tables loop  beginexecute 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); ENDsqlcode是异常编号,sqlerrm是异常的详细信息,如果异常信息太多,可以截取一段显示,如 DBMS_OUTPUT.put_line(‘sqlerrm : ’ ||substr(sqlerrm,1,100));是截取前100个字符显示出来。也可以插入到日志表insert xxx  values (sqlcode,sqlerrm)

  

转载地址:http://vvgjo.baihongyu.com/

你可能感兴趣的文章
Diff Two Arrays
查看>>
stark组件(1):动态生成URL
查看>>
169. Majority Element
查看>>
下拉菜单
查看>>
[清华集训2014]玛里苟斯
查看>>
Doctype作用?严格模式与混杂模式如何区分?它们有何意义
查看>>
【MVC+EasyUI实例】对数据网格的增删改查(上)
查看>>
第三章:如何建模服务
查看>>
Project Euler 345: Matrix Sum
查看>>
你可能不知道的技术细节:存储过程参数传递的影响
查看>>
POJ1703 Find them, Catch them
查看>>
HTML转义字符大全(转)
查看>>
[摘录]调动员工积极性的七个关键
查看>>
Linux getcwd()的实现【转】
查看>>
Backup Volume 操作 - 每天5分钟玩转 OpenStack(59)
查看>>
.htaccess 基础教程(四)Apache RewriteCond 规则参数
查看>>
转: maven进阶:一个多模块项目
查看>>
Android控件之HorizontalScrollView 去掉滚动条
查看>>
UVM中的class--2
查看>>
任务调度器配置文件
查看>>