#PLSQL_Trigger重复客户不起作用

时间:2017-04-07 02:30:57

标签: plsql

家庭作业要求:创建一个触发器,其中帐户必须属于一个且只有一个客户。

我的代码如下所示不起作用。 错误消息:引用的字符串未正确终止。请帮忙。

create or replace trigger dupcust
before insert or update on ACCOUNT
for each row
declare
    v_ctn NUMBER;
begin
    select count(account.cname) into v_ctn from account where A#=:new.A#;
    if v_ctn>0 then  
        raise_application_error (-20107, 'ACCT CAN ONLY BELONG TO ONE CUSTOMER');
    end if;
end;

测试代码:

UPDATE ACCOUNT SET ACCOUNT.CNAME =’Cook’ WHERE ACCOUNT.A# = ‘1111’;

1 个答案:

答案 0 :(得分:2)

当我复制你的查询时,它由于字符串cook和1111周围的引号而失败。你显然使用了错误的引号字符,我更正了引号,当我运行查询时,触发器产生一个变异错误,答案可以在这里找到:

PLSQL Trigger Error. "is mutating, trigger/function may not see it" ORA-04091

基本上你是从正在更新的表中读取,这会导致变异,你不能这样做。

复合触发器,如果​​写得正确,就可以完成这个工作,例如:

Oracle trigger after insert or delete