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