PLSQL_触发器重复a有错误

PLSQL_触发器重复a有错误,plsql,Plsql,我创建了这个触发器以防止添加重复帐户。但是当我通过插入一个重复的帐户来测试触发器时,我得到了一个错误 违反了唯一约束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_c

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

违反了唯一约束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;

如果出现以下情况,您应该:

--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时,您的条件将不起作用

如果条件:

--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时,您的条件将不起作用

您的触发器没有抛出错误。它甚至没有开火

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


如果您触发了触发器,您将得到一个ORA-04091表名正在变异。。。错误不能在行级触发器中引用触发表

您的触发器没有抛出错误。它甚至没有开火

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


如果您触发了触发器,您将得到一个ORA-04091表名正在变异。。。错误不能在行级触发器中引用触发表

谢谢你的评论!!我不明白您不能在行级触发器中引用触发表。在插入或更新帐户表时触发该触发器。因此,在该触发器中,您无法从帐户中进行选择,因此insert into table列值有一个例外。。。。甲骨文可以保证;这是单行。谢谢你的评论!!我不明白您不能在行级触发器中引用触发表。在插入或更新帐户表时触发该触发器。因此,在该触发器中,您无法从帐户中进行选择,因此insert into table列值有一个例外。。。。甲骨文可以保证;这是一排。