Plsql PL SQL处理触发器错误

Plsql PL SQL处理触发器错误,plsql,oracle10g,Plsql,Oracle10g,我有数千个sql插入到行中的脚本文件。其中一些行将插入数据库中已经存在的数据,因此我希望捕获这些错误并绕过它。有没有办法捕捉触发器抛出的错误并忽略它 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 我可以通过在索

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

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\u VAL\u,然后执行
NULL
,使用独特的约束来实现这一点,但这对上述触发错误不起作用。

您可以定义自己的异常并使用它,就像使用默认异常处理程序一样,如
DUP\u\u ON\u 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;
声明
l_唯一_用户名_例外;
pragma exception_init(l_unique_username_ex,-20053);
开始
例外情况
当l\u唯一\u用户名\u ex
然后
空;——忽略错误
结束;

但总的来说,更合理的做法是修改脚本,使其仅尝试插入不存在的行,而不是让触发器尝试标记这些行,然后忽略错误。

您可以定义自己的异常并使用它,就像使用默认异常处理程序一样,如
dup\u val\u on\u 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;
声明
l_唯一_用户名_例外;
pragma exception_init(l_unique_username_ex,-20053);
开始
例外情况
当l\u唯一\u用户名\u ex
然后
空;——忽略错误
结束;

一般来说,修改脚本是非常有意义的,以便他们只尝试插入那些尚未存在的行,而不是让触发器试图标记它们,然后忽略错误。

另一个要考虑的选项:插入到临时表中,然后插入主表。重复的用户名可能有其他要保留的列,或者保留第一个创建的用户名。如果有一些数据清理通过临时表路由,那么许多这样的任务会更容易。另一个选择要考虑:插入一个临时表,然后进入主表。重复的用户名可能有其他要保留的列,或者保留第一个创建的用户名。如果您通过临时表路径进行某种数据清理,那么许多这样的任务将更容易完成。