对于PL/sql
语句,使用在触发器中,使用NEW,OLD前边加上:  是必须的。
这是唯一届定联编变量的地方。
curym := NEW.REC_MONTH;
curmeterno := NEW.METER_NO;
改为:
curym := :NEW.REC_MONTH;
curmeterno :=: NEW.METER_NO;

解决方案 »

  1.   

    思路对的,写错了
    不能用after 操作new值,另外需考虑多种可能如空库和多条数据。
    CREATE OR REPLACE TRIGGER "MONTH_DATA_TRIGGER" before
    INSERT ON "MONTH_RECORD" 
        FOR EACH ROW 
        declare
    curym number; 
    priym number;
    curmeterno varchar2(9);
    prisum month_record.pri_sum%type;
    priapex month_record.pri_apex%type;
    prilow month_record.pri_low%type;
    priflat month_record.pri_flat%type;
    pritop month_record.pri_top%type;begin
    curym := :NEW.REC_MONTH;
    curmeterno := :NEW.METER_NO;
    select max(REC_MONTH) into priym FROM MONTH_RECORD WHERE (REC_MONTH < curym) AND (METER_NO = curmeterno);
    --考虑无任何数据时
    if priym is not null then
    --考虑多条满足数据
    select CUR_SUM,CUR_APEX,CUR_LOW,CUR_FLAT,CUR_TOP INTO prisum,priapex,prilow,priflat,pritop FROM MONTH_RECORD
    WHERE (METER_NO = curmeterno) and (REC_MONTH = priym) and rownum=1;
    :NEW.PRI_SUM := prisum;
    :NEW.PRI_APEX := priapex;
    :NEW.PRI_LOW := prilow;
    :NEW.PRI_FLAT :=priflat;
    :NEW.PRI_TOP :=pritop;
    end if ;
    end;