rem *****************************************************
rem ** 触发器
rem ** 功能:欲取款金额数大于账户余额,系统提示出错
rem ******************************************************
create or replace trigger  WithdrawTri 
before insert or update on Withdraw1416 
declare
   money Account1416.balance%type;
begin
   select balance into money from Account1416 where accountNo1416 = :new.accountNo1416;
   if money < :new.withdrawSum then
      rasie_application_error(-20000,'您的当前的可用余额不足,请您重新确认取款额',);
   end if;
end WithdrawTri;
如果插入withdraw1416(取款表)中的值withdrawSum大于Account1416(账户表)中的balance值,就提示出错,为什么不行呢
哪位好心人帮我改改!不胜感激!
Error report:
ORA-04082: NEW 或 OLD 引用不允许在表级触发器中04082. 00000 -  "NEW or OLD references not allowed in table level triggers"
*Cause:    The trigger is accessing "new" or "old" values in a table trigger.
*Action:   Remove any new or old references.

解决方案 »

  1.   

    create or replace trigger WithdrawTri 
    before insert or update on Withdraw1416 
    for each row--行级触发器
    declare
      money Account1416.balance%type;
    begin
      select balance into money from Account1416 where accountNo1416 = :new.accountNo1416;
      if money < :new.withdrawSum then
      rasie_application_error(-20000,'您的当前的可用余额不足,请您重新确认取款额',);
      end if;
    end WithdrawTri;
    加上红色部分,使用行级触发器,即针对行的,
    行级触发器才能使用:new.字段,:old.字段来引用字段的新值或旧值
    没有for each row则是表级触发器
      

  2.   


    create or replace trigger WithdrawTri  
    before insert or update on Withdraw1416 for each row
    declare
      money Account1416.balance%type;
    begin
      select balance into money from Account1416 where accountNo1416 = :new.accountNo1416;
      if money < :new.withdrawSum then
      rasie_application_error(-20000,'您的当前的可用余额不足,请您重新确认取款额',);
      end if;
    end WithdrawTri;--   应该搞行级触发器
      

  3.   

    改完后,为什么总是出现这样的警告错误:line6 出现符号','在需要下列之一时
      

  4.   

    改完后,为什么总是出现这样的警告错误:line6 出现符号','在需要下列之一时 ..........
     
      

  5.   

     当我改完后,出现这样的警告错误:
    6/38  PLS-00103:出现符号","在需要下列之一时:
           >,*, & = - < / > at in is mod remainder not rem =>
         <an exponent <**>> <> or!  = or ~= >=
         <= <> and or like like2 like4 likec as between from using || memeber submultiset
      

  6.   

    rasie_application_error(-20000,'您的当前的可用余额不足,请您重新确认取款额',);把这个comma去掉
      

  7.   

    直接改成这样:
    rasie_application_error(-20000,'您的当前的可用余额不足,请您重新确认取款额');
      

  8.   

    另外你的单引号要用英文输入法下的单引号,不能用中文输入法下的单引号
    在PL/SQL中所有的标点符号都必须是英文下的标点符号