程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracleDML錯誤日志

oracleDML錯誤日志

編輯:Oracle教程

oracleDML錯誤日志


DML錯誤日志是oracle10gR2引入的一個類似於SQL*Loader的錯誤日志功能。它的基本原理是把任何可能導致語句失敗的記錄轉移,放到一張錯誤日志表中。

具體使用如下:

1、使用DBMS_ERRLOG.CREATE_ERROR_LOG來創建錯誤日志表

--原表my_test表結構
desc my_test  
Name   Type         Nullable Default Comments 
------ ------------ -------- ------- -------- 
SID    NUMBER                                 
NAME   VARCHAR2(20) Y                         
GENDER INTEGER      Y                         
AGE    NUMBER       Y                         
HOBBY  VARCHAR2(20) Y   


--執行下面的語句,生成錯誤日志表
execute dbms_errlog.create_error_log('my_test','my_test_bad');
 
PL/SQL procedure successfully completed.

--生成的錯誤日志表my_test_bad結構
desc my_test_bad
Name            Type           Nullable Default Comments 
--------------- -------------- -------- ------- -------- 
ORA_ERR_NUMBER$ NUMBER         Y                         
ORA_ERR_MESG$   VARCHAR2(2000) Y                         
ORA_ERR_ROWID$  UROWID(4000)   Y                         
ORA_ERR_OPTYP$  VARCHAR2(2)    Y                         
ORA_ERR_TAG$    VARCHAR2(2000) Y                         
SID             VARCHAR2(4000) Y                         
NAME            VARCHAR2(4000) Y                         
GENDER          VARCHAR2(4000) Y                         
AGE             VARCHAR2(4000) Y                         
HOBBY           VARCHAR2(4000) Y                         

其中ORA_ERR_TAG$這個字段可以存放用戶自定義的數據

2、在insert語句中使用my_test_bad錯誤日志表

insert into my_test
  (sid,name,gender,age,hobby)
  values (12,'joy',2,'age','book,football,run')
  log errors into my_test_bad;
 
insert into my_test
(sid,name,gender,age,hobby)
values (12,'joy',2,'age','book,football,run')
log errors into my_test_bad
 
ORA-01722: 無效數字
 
SQL> select * from my_test_bad;--(結果不規范,用圖展示)  

  \

update,delete,merge語句都可以在後面聲明錯誤日志,方法相同。如:

  update my_test
     set age = 'yyy'
   where sid = 12 
   log errors into my_test_bad;

  

注意事項:log errors子句不引起隱式提交,也就是說,即使回滾了失誤,錯誤信息還是會保存在錯誤日志表中。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved