有2张表,分别是专业表t_eol_pro(pro_id,pro_name,pro_state,pro_kens----知识点数量,默认为0.表示可用,1为不可用);
                             知识点变t_eol_ken(ken_id,ken_name,pro_id,ken_state)
                  当我向知识点表t_eol_ken插入一条数据的时候,专业表t_eol_pro中的pro_kens数量+1,这个触发器已经写出来了
            当改变知识点状态ken_state为1的时候表示这个知识点不可用,然后专业表t_eol_pro中的pro_kens数量-1。create or replace trigger rowupdate
         after update on T_EOL_KEN
         REFERENCING NEW AS New OLD AS Old FOR EACH ROW
        declare
        old_value int;
        new_value int;
        upid int;
    begin
     if updating then
        old_value:=:Old.ken_state;
         new_value:=:New.ken_state;
         upid:=:Old.pro_id;
         end if;
    if(old_value=0 and new_value=1) then
     
        update T_EOL_PRO set T_EOL_PRO.PRO_KENS=T_EOL_PRO.PRO_KENS -1 where PRO_ID=upid;
                     
       end if;
end rowupdate;     
            现在遇到的问题就是 当我创建这个触发器的时候,就提示我给:new 和: old 两个变量赋值 我赋给他t_eol_ken和不赋值都提示“非法的变量名/编号 ”
            我不清楚这两个变量到底赋什么值才对     或者那位高手可以提供下关于这个触发器其他写法或思路

解决方案 »

  1.   

    去掉REFERENCING NEW AS New OLD AS Old FOR EACH ROW 
    或者NEW AS New后面那个NEW换个其它名字
      

  2.   

    你加了REFERENCING NEW AS New OLD AS Old 那还用:new,:old干嘛。
    去掉:new,:old的冒号或者去掉REFERENCING NEW AS New OLD AS Old
      

  3.   


    /--字段的对应LZ可以自行改一下:create or replace trigger rowupdate
      after update on T_EOL_KEN
      FOR EACH ROW
    begin
      if (:Old.ken_state = 0 and :New.ken_state = 1) then
        update T_EOL_PRO
           set :new.T_EOL_PRO.PRO_KENS = :old.T_EOL_PRO.PRO_KENS - 1
         where :new.PRO_ID = :Old.pro_id;
      end if;
    end rowupdate;
      

  4.   


    create or replace trigger rowupdate
      after update on T_EOL_KEN
      REFERENCING OLD AS OLD NEW AS NEW
      FOR EACH ROW
    begin
      if (:Old.ken_state = 0 and :New.ken_state = 1) then
        update T_EOL_PRO
           set :new.T_EOL_PRO.PRO_KENS = :old.T_EOL_PRO.PRO_KENS - 1
         where :new.PRO_ID = :Old.pro_id;
      end if;
    end rowupdate;
      

  5.   


    /--再试下:create or replace trigger rowupdate
      after update on T_EOL_KEN
      REFERENCING OLD AS OLD NEW AS NEW
      FOR EACH ROW
    begin
      if :New.ken_state=1 then
        update T_EOL_PRO
           set PRO_KENS = PRO_KENS - 1
         where PRO_ID = :Old.pro_id;
      end if;
    end rowupdate;
      

  6.   

    还是这个问题:
                当我创建这个触发器的时候,就提示我给:new 和: old 两个变量赋值 我赋给他t_eol_ken(表名)和不赋值都提示“非法的变量名/编号 ” 
                我不清楚这两个变量到底赋什么值才对
             
                我是第一此接触oracle而且第一次写触发器 对:new 和:old 不是很了解
      

  7.   

    不是说了吗去掉:号或去掉REFERENCING NEW AS New OLD AS Old