具体使用如下:
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子句不引起隐式提交,也就是说,即使回滚了失误,错误信息还是会保存在错误日志表中。