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

 

極可能是存儲過程當中可能出現全角的空格,這種錯是不可見的,存儲過程只接受半角的空格,這種錯誤屬於比較難查的。好比$符是識別不了的。

相關文章
相關標籤/搜索