Plsql PL SQL处理触发器错误
我有数千个sqlPlsql 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 我可以通过在索
插入到行中的脚本文件。其中一些行将插入数据库中已经存在的数据,因此我希望捕获这些错误并绕过它。有没有办法捕捉触发器抛出的错误并忽略它
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
然后
空;——忽略错误
结束;
一般来说,修改脚本是非常有意义的,以便他们只尝试插入那些尚未存在的行,而不是让触发器试图标记它们,然后忽略错误。
另一个要考虑的选项:插入到临时表中,然后插入主表。重复的用户名可能有其他要保留的列,或者保留第一个创建的用户名。如果有一些数据清理通过临时表路由,那么许多这样的任务会更容易。另一个选择要考虑:插入一个临时表,然后进入主表。重复的用户名可能有其他要保留的列,或者保留第一个创建的用户名。如果您通过临时表路径进行某种数据清理,那么许多这样的任务将更容易完成。