PLSQL_trigger重复#有错误

时间:2017-04-06 02:44:20

标签: plsql

我创建了这个触发器,可以防止添加重复的acct#。但是当我通过插入重复的acct#来测试触发器时,我得到了错误

  

UNIQUE CONSTRAINT(JL.PK.ACCOUNT)违反

请帮忙。

create or replace trigger update_acct#
    before insert or update on ACCOUNT
    for each row
    declare
        v_cta# NUMBER;

    begin
        select count(A#) into v_cta# from account where A#=:new.A#;
        if v_cta#>1 then  
           raise_application_error (-20105, 'DUPLICATE ACCOUNT NUMBER');
        end if;
    end;

2 个答案:

答案 0 :(得分:2)

你的触发器没有抛出错误。它甚至没有发射。

您没有从提供的错误中发布表定义,但它看起来像定义中的A#列作为主键。当您尝试插入重复行时,在验证PK时会引发错误。您不必检查重复项的主键:Oracle保证它是唯一的。

你进一步触发了你会得到一个" ORA-04091表名称正在变异......"错误。您无法在行级触发器中引用触发表。

答案 1 :(得分:1)

你应该在条件:

--old code
if v_cta#>1 then  
           raise_application_error (-20105, 'DUPLICATE ACCOUNT NUMBER');
end if;

--new code
if v_cta#>0 then  
     raise_application_error (-20105, 'DUPLICATE ACCOUNT NUMBER');
end if;

当v_cta#等于1时,您的条件将不起作用