dbms_errlog.create_error_log 记录DML错误日志

业务场景:sql

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

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

简单实例:测试

1.建立test2表fetch

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

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

相应的错误日志表LOG_TEST2结构资源

3.测试it

执行两次一下sql语句pip

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

 

而后查看test2表和Log_test2表

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

 

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

相关文章
相关标签/搜索