首页 > 数据库 > Oracle > 记录错误并继续运行:错误事件记录子句 --转
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博客 ” ,链接:https://blog.itpub.net/197458/viewspace-1008457/ ,如需转载,请注明出处,否则将追究法律责任。