标签:
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子句不引起隐式提交,也就是说,即使回滚了失误,错误信息还是会保存在错误日志表中。
标签:
原文地址:http://www.cnblogs.com/mozizhu/p/4218692.html