家庭作业要求:创建一个触发器,其中帐户必须属于一个且只有一个客户。
我的代码如下所示不起作用。 错误消息:引用的字符串未正确终止。请帮忙。
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’;
答案 0 :(得分:2)
当我复制你的查询时,它由于字符串cook和1111周围的引号而失败。你显然使用了错误的引号字符,我更正了引号,当我运行查询时,触发器产生一个变异错误,答案可以在这里找到:
PLSQL Trigger Error. "is mutating, trigger/function may not see it" ORA-04091
基本上你是从正在更新的表中读取,这会导致变异,你不能这样做。
复合触发器,如果写得正确,就可以完成这个工作,例如: