十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
异常是执行这个存储过程出的异常吧,那就是说只有执行一次这个存储过程才会抛一次异常么?如果这样我建议你可以再写个存储过程来调用你这个存储过程,这样来记录异常的次数。然后再进行处理!
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序制作、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了尖山免费建站欢迎大家使用!
不知道你想在什么环境下捕获,不知道你说的SQL是怎么捕获,或者你说的是脚本?
如果是在存储过程中捕获
有两个思路吧,
1、直接使用普通的异常处理,获取异常的代码,匹配是否为00942,然后就捕获到这个异常。
2、自定义异常处理,使用数据字典,首先查询数据字典中是否存在这表,如果不存在,就产生一个自定义的异常,在这个异常里你做处理。
------------------------------------------------------------------------------------
declare
myexception exception;
--表个数
v_num integer :=0;
begin
--查询表名为MY_USER表个数
SELECT count(*) into v_num FROM tabs WHERE table_name = 'MY_USER'
if v_num=0 then
raise myexception;
end if;
exception
when myexception then
raise_application_error(20001,'my exception happens');
when others then
raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
end
----------------------------------------------------------------------------------------
伪代码,你可以嵌到你的存储过程中去使用。
对于异常都是将异常信息插入到数据表里面,然后程序界面显示出来。
要保证不中断,需要用游标,单个记录进行插入,异常记录插入错误信息表
declare
begin
for rec in (select * from b) loop
begin
insert into a
select * from b where ...;
exception when otherst then
insert into err_msg
select * from b where ...;
end;
end loop;
end;