我创建了这个触发器,可以防止添加重复的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;
答案 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时,您的条件将不起作用