dbms_errlog.create_error_log 记录DML错误日志

业务场景:

当一个DML运行的时候,如果遇到了错误,则这条语句会整个回滚,就好像没有执行过。不过对于一个大的DML而言,如果个别数据错误而导致整个语句的回滚,会浪费很多的资源和运行时间,从10g开始Oracle支持记录DML语句的错误,而允许语句自动继续执行。

DBMS_ERRLOG提供了一个存储过程CREATE_ERROR_LOG,这个存储过程创建一个错误日志表,当DML出错时,操作不会终止和回滚,而是将相关的错误写到错误日志表中。
CREATE_ERROR_LOG不支持一些数据类型:LONG, CLOB,BLOB, BFILE, and ADT。

简单实例:

1.创建test2表

100152_zd9b_3409039.png

2.调用存储过程自动创建相应的错误日志表

begin 
  dbms_errlog.create_error_log('TEST2','LOG_TEST2');
end;

相应的错误日志表LOG_TEST2结构

100347_mMHW_3409039.png

3.测试

执行两次一下sql语句

insert into test2  values('1','zhangsan') LOG ERRORS INTO LOG_TEST2 REJECT LIMIT UNLIMITED;

 

然后查看test2表和Log_test2表

100534_rJ6b_3409039.png

100609_WHbK_3409039.png

4.注意事项:

报错信息:

  begin case declare exit for
          goto if loop mod null pragma raise return select update while
          with <an identifier> <a double-quoted delimited-identifier>
          <a bind variable> << close current delete fetch lock insert
          open rollback savepoint set sql execute commit forall merge
          pipe

 

很可能是存储过程中可能出现全角的空格,这种错是不可见的,存储过程只接受半角的空格,这种错误属于比较难查的。比如$符是识别不了的。

 

转载于:https://my.oschina.net/u/3409039/blog/1649615

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值