UPDATE XT_MEASUREFORECAST 
SET FORECASTENERGY = decode(:new.day,1,:NEW.ENERGY1 ,2,:new.energy2,...)
WHERE MEASUREID=:NEW.OBJID;

解决方案 »

  1.   

    jxc(GameHeart)
    不是这个意思,我的意思是
    ENERGY+i+
    就是这个字段是可变的,可以是ENERGY1,或者ENERGY2
    而这个i的值就是:NEW.DAY
    改怎么写
      

  2.   

    CREATE OR REPLACE TRIGGER "TRI_XT_MONTHENERGY_I" BEFORE INSERT ON "XT_MONTHENERGY" FOR EACH ROW 
    when (NEW.OBJTYPE=19)
    BEGIN
         UPDATE XT_MEASUREFORECAST 
         SET FORECASTENERGY = :NEW.ENERGY||:NEW.DAY WHERE MEASUREID=:NEW.OBJID;
    END;after ..for each row不允许行级触发器,在插入一行后,对表进行操作
      

  3.   

    rolandzhang()
    我照着你的写,可以PL/SQL报错:bad bind variable "NEW>ENERGY"
    好像不行啊,帮忙再看看
      

  4.   

    CREATE OR REPLACE TRIGGER "TRI_XT_MONTHENERGY_I" AFTER INSERT ON "XT_MONTHENERGY" FOR EACH ROW 
    when (NEW.OBJTYPE=19)
    declare 
      e1 varchar2(10);
      e2 varchar2(10);
    begin
      e1:=:new.day; 
      e2:='new.energy'||en;
      UPDATE XT_MEASUREFORECAST 
         SET FORECASTENERGY = e2 WHERE MEASUREID=:NEW.OBJID;
    end;
      

  5.   

    e1 varchar2(30);
    e2 varchar2(50);
      

  6.   

    CREATE OR REPLACE TRIGGER "TRI_XT_MONTHENERGY_I" AFTER INSERT ON "XT_MONTHENERGY" FOR EACH ROW 
    when (NEW.OBJTYPE=19);
    DECLARE STR VARCHAR2(1000);
    BEGIN
         STR:=' UPDATE XT_MEASUREFORECAST '||
         ' SET FORECASTENERGY = :NEW.ENERGY'||:NEW.DAY || ' WHERE MEASUREID=:NEW.OBJID';
         EXECUTE IMMEDIATE (STR);
    END;
      

  7.   

    我觉得这个是对的,你再仔细看看
    -----------------------------------
    UPDATE XT_MEASUREFORECAST 
    SET FORECASTENERGY = decode(:new.day,
       1,:NEW.ENERGY1 ,
       2,:new.energy2 ,...)
    WHERE MEASUREID=:NEW.OBJID;或者写一大堆if - elsif 语句吧