2012-09-17 51 views
1

我有脚本文件,其中有数以千计的sql INSERT INTO行。这些行中的一些会插入已经在数据库中的数据,所以我想捕获这些错误并绕过它。有没有办法来捕捉触发器抛出的错误并忽略它?PL 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_VAL_ON_INDEX,然后做NULL具有唯一约束做到这一点,但这并不对上述触发错误工作。

+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; 

在一般情况下,虽然,它会更有意义修改脚本,以便他们只尝试插入已经不存在,而不是让触发试图将它们标记,然后忽略错误行。

+0

谢谢,这个作品! – user1636922