#PLSQL\u触发器重复客户不工作
家庭作业要求:创建一个触发器,其中帐户必须属于且仅属于一个客户 我的代码如下所示不起作用。 错误mesg:带引号的字符串未正确终止。请帮忙#PLSQL\u触发器重复客户不工作,plsql,Plsql,家庭作业要求:创建一个触发器,其中帐户必须属于且仅属于一个客户 我的代码如下所示不起作用。 错误mesg:带引号的字符串未正确终止。请帮忙 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#=:
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’;
当我复制您的查询时,由于字符串cook和1111周围的引号,它失败了。您显然使用了错误的引号字符,我更正了引号,当我运行查询时,触发器会生成一个变异错误,可以在此处找到答案: 基本上,你是从你正在更新的表中读取的,这会导致变异,你不能这样做 如果正确写入复合触发器,则可以执行此操作,示例如下:
当我复制您的查询时,由于字符串cook和1111周围的引号,它失败了。您显然使用了错误的引号字符,我更正了引号,当我运行查询时,触发器会生成一个变异错误,可以在此处找到答案: 基本上,你是从你正在更新的表中读取的,这会导致变异,你不能这样做 如果正确写入复合触发器,则可以执行此操作,示例如下:
账户的主键不应该是
A 35;
?因此,每个帐号不可能有多个记录,一个帐号也不可能有多个客户。难道A\#
不应该是帐号的主键吗?因此,每个帐号不可能有多个记录,一个帐号不可能有多个客户。嗨,普雷斯科特,非常感谢你的评论和引用!我添加了pragma autonomy_事务;在声明部分,触发器起作用。我想知道这个pragma autonomic_事务是做什么的。你可以在这里阅读pragma autonomic_事务:,它基本上允许你在事务内部操作数据,而不会影响事务外部的数据。自治事务不是解决这个问题的正确方法。触发器代码在调用会话中看不到新插入/更新的行,因此“验证”只会意外成功。嗨,普雷斯科特,非常感谢您的评论和引用!我添加了pragma autonomy_事务;在声明部分,触发器起作用。我想知道这个pragma autonomic_事务是做什么的。你可以在这里阅读pragma autonomic_事务:,它基本上允许你在事务内部操作数据,而不会影响事务外部的数据。自治事务不是解决这个问题的正确方法。触发器代码在调用会话中看不到新插入/更新的行,因此“验证”只会意外成功。