PL SQL处理触发器错误

时间:2012-09-17 19:56:09

标签: plsql oracle10g

我有数千个sql INSERT INTO行的脚本文件。其中一些行将插入已存在于数据库中的数据,因此我想捕获这些错误并绕过它。有没有办法捕获触发器抛出的错误并忽略它?

ERROR at line 1:
ORA-20053: Username must be unique
ORA-06512: at "MY_TRIGGER", line 18
ORA-04088: error during execution of trigger 'MY_TRIGGER'
ORA-06512: at line 3

我可以通过捕获DUP_VAL_ON_INDEX然后执行NULL来解决此问题,但这不适用于上述触发错误。

1 个答案:

答案 0 :(得分:1)

您可以定义自己的异常并使用它,就像使用dup_val_on_index之类的默认异常处理程序一样。

DECLARE
  l_unique_username_ex exception;
  pragma exception_init( l_unique_username_ex, -20053 );
BEGIN
  <<your INSERT statement>>
EXCEPTION
  WHEN l_unique_username_ex
  THEN
    NULL; -- Ignore the error
END;

一般而言,修改脚本会更有意义,因为它们只会尝试插入尚不存在的行,而不是让触发器尝试标记它们,然后忽略错误。