dml错误日志是oracle 10gr2引入的一个类似于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子句不引起隐式提交,也就是说,即使回滚了失误,错误信息还是会保存在错误日志表中。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!