記錄錯誤並繼續執行:錯誤事件記錄子句 --轉

jidongzheng發表於2008-08-04
假設您正試圖將表 ACCOUNTS_NY 的記錄插入到表 ACCOUNTS 中。表 ACCOUNTS 在 ACC_NO 列上有一個主鍵。可能 ACCOUNTS_NY 中的某些行與該主鍵衝突。嘗試使用一個常規的插入語句:
SQL> insert into accounts
2  select * from accounts_ny;
insert into accounts
*
ERROR at line 1:
ORA-00001:unique constraint (ARUP.PK_ACCOUNTS) violated
表 ACCOUNTS_NY 中的記錄均未被裝載。現在,將錯誤事件記錄項開啟,嘗試同樣的操作。首先,您需要建立一個表來儲存由 DML 語句所拒絕的記錄。呼叫該表 ERR_ACCOUNTS。
exec dbms_errlog.CREATE_ERROR_LOG ('ACCOUNTS','ERR_ACCOUNTS')
接下來,執行前面的語句,並加入事件記錄子句。
SQL> insert into accounts
2  select * from accounts_ny
3  log errors into err_accounts
4  reject limit 200
  5  /

6 rows created.
注意,表 ACCOUNTS_NY 包含 10 行,但只有六行被插入;其他四行由於某種錯誤而被拒絕。要找出錯誤是什麼,可查詢 ERR_ACCOUNTS 表。
SQL> select ORA_ERR_NUMBER$, ORA_ERR_MESG$, ACC_NO
2  from err_accounts;

ORA_ERR_NUMBER$   ORA_ERR_MESG$                                       ACC_NO
 ---------------  --------------------------------------------------  ------
1  ORA-00001:unique constraint (ARUP.PK_ACCOUNTS) vi  9997
olated
1  ORA-00001:unique constraint (ARUP.PK_ACCOUNTS)vi  9998
olated
1  ORA-00001:unique constraint (ARUP.PK_ACCOUNTS) vi 9999
olated
1  ORA-00001:unique constraint (ARUP.PK_ACCOUNTS) vi 10000
olated
請注意列 ORA_ERR_NUMBER$,它顯示在 DML 語句執行期間所遇到的 Oracle 錯誤號,還有 ORA_ERR_MESG$,它顯示錯誤訊息。在本例中,您可以看到四條記錄被丟棄是因為它們與主鍵約束 PK_ACCOUNTS 相沖突。該表還捕獲表 ACCOUNTS 的所有列,包括列 ACC_NO。檢視被拒絕的記錄,注意這些帳號已經在表中存在,因此這些記錄由於 ORA-00001 錯誤而被拒絕。如果沒有錯誤事件記錄子句,則整個語句將會出錯,不會拒絕任務記錄。透過這個子句,只有無效的記錄被拒絕;其他所有記錄均得以接受。 [@more@]記錄錯誤並繼續執行:錯誤事件記錄子句

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/197458/viewspace-1008457/,如需轉載,請註明出處,否則將追究法律責任。

相關文章