关于存储过程异常处理的问题
时间:2011-12-14
来源:互联网
我写了一个存储过程,
在loop游标的时候,需要作一下判断,当游标中某一字段的值包含“N”这个字符时,则进行插入,为"U"则更新。在插入时由于可能出现主键冲突,需要将所有有问题的数据插入其他另外一张表里,正常的数据则继续插入,请问这个可以实现吗?谢谢
作者: sos0710 发布时间: 2011-12-14
SQL code
begin insert ....; commit; exception when others then rollback; insert into other_table...; commit; end;
作者: yixilan 发布时间: 2011-12-14
作者: sos0710 发布时间: 2011-12-14
CURSOR cur_ics_tkt IS
select ... from ics_tkt_back t;
passengerid varchar(20);
....
begin
open cur_ics_tkt;
LOOP
fetch cur_ics_tkt
into passengerid,
....;
IF (cur_ics_tkt%FOUND) THEN
statusnum:=instr(status, 'N');
IF (statusnum > 0) THEN --如果状态值里有N,则表示NEW数据,即新增
insert into ics_tkt
....
ELSIF (statusnum < 1) THEN --反之有两种情况
statusnum:=substr(status, 10, 1);
IF (statusnum = 1) THEN --倒数第二位数字为1,则表示删除该条交易
delete from ics_tkt t
....
ELSE --不是则表示更新
update ics_tkt t
....
end if;
end if;
else
exit;
end if;
END LOOP;
commit;
end PROC_ICS_TKT;
这就是我大概的代码,请问我应该把exception放到哪儿?谢谢
作者: sos0710 发布时间: 2011-12-14
SQL code
begin ... loop begin insert into ...//正常作业 exception//声明异常 where others then null; insert into ... //将出现异常的数据插入到表 end; end loop; commit; end;
作者: chengccy2010 发布时间: 2011-12-14
CURSOR cur_ics_tkt IS
select ... from ics_tkt_back t;
passengerid varchar(20);
....
begin
open cur_ics_tkt;
LOOP
fetch cur_ics_tkt
into passengerid,
....;
begin
IF (cur_ics_tkt%FOUND) THEN
statusnum:=instr(status, 'N');
IF (statusnum > 0) THEN --如果状态值里有N,则表示NEW数据,即新增
insert into ics_tkt
....
ELSIF (statusnum < 1) THEN --反之有两种情况
statusnum:=substr(status, 10, 1);
IF (statusnum = 1) THEN --倒数第二位数字为1,则表示删除该条交易
delete from ics_tkt t
....
ELSE --不是则表示更新
update ics_tkt t
....
end if;
end if;
else
exit;
end if;
exception --声明异常
where others then null;
insert into ... --将出现异常的数据插入到表
end;
END LOOP;
commit;
end PROC_ICS_TKT;
作者: chengccy2010 发布时间: 2011-12-14
这边是因为主键冲突而导致异常,插入另一个表
要是这边不是因为主键冲突而发生异常,并且插入另一个表成功。会不会是个bug?
我觉得插入之前查一遍,存在了就不插,并且换插另外一个表,不存在就插入。
作者: xpingping 发布时间: 2011-12-14
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28