【发布时间】:2014-04-24 20:14:08
【问题描述】:
得到一个错误的绑定变量“old.seatsremain”和“new.seatsremain”。如果席位可用于特定产品,则尝试使此触发器自动减少产品的席位数量。我是否必须在前面声明所有变量:????我的两张桌子是:
enrollments
{sid number,
offerno number;)
和
offering
{offerno number,
courseno varchar2(10),
instructor varchar2(10),
seatsremain number;}
更新的代码测试: 好的,所以我合并了 Fumble 给我的编码,它清除了最初弹出的错误,但是我测试了这个新代码,我仍然有一些剩余的错误,因为我不知道为什么的 EXCEPTION 子句,因为我仔细检查的语法应该是正确的。有什么想法吗??
create or replace trigger enroll_bef_ins_row
before insert on enrollments
for each row
declare
originstruct offering.instructor%type;
origcourseno offering.courseno%type;
original offering.seatsremain%type;
seatsremain_already_full exception;
begin
Select seatsremain, instructor, courseno into original, originstruct, origcourseno from offering where offerno= :new.offerno;
if original > 0 then
update offering set seatsremain= seatsremain - 1;
dbms_output.put_line ('Seats available in offering'||offerno||'have decreased from'||original|| 'to' ||(seatsremain));
else if original = 0 then
raise seatsremain_already_full;
dbms_output.put_line ('Offering'||offerno||'is already full!');
else
update offering set offerno = :old.offerno;
update offering set courseno = origcourseno;
update offering set instructor = originstruct;
update offering set seatsremain = original;
end if;
exception
when seatsremain_already_full then
raise_application_error (-20001, 'Cannot allow insertion');
commit;
end;
/
现在出现此错误: PLS-00103:在期待一个时遇到符号“例外” 以下的: 开始 case 声明 goto 的结束退出 if loop mod null pragma 在使用时提高返回选择更新
PLS-00103:预期时遇到符号“文件结尾” 以下之一: end not pragma final 可实例化顺序覆盖静态
【问题讨论】:
-
对产品的提交需要一个 pragma autonomus_transaction。我将更新我的示例代码。
-
嗯尝试了编译指示以及在异常之前将提交向上移动......它仍然抛出相同的错误
-
ahhh nvm im 愚蠢的 ELSE IF 应该是 ELSIF
-
那么你让它工作了吗?
-
我做到了!!!非常感谢您的帮助!