请解释一下这个颇让oracle触发器create or replace trigger CUX_CREATE_DOC_SEQbefore update of STATUS on GL.GL_JE_HEADERSfor each rowwhen (old.status 'P'and new.CURRENCY_CODE 'STAT' AND NEW.ACTUAL_FLAG = 'A')declareVPREFLEX varchar2(20);VSEQ
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/30 16:19:53
![请解释一下这个颇让oracle触发器create or replace trigger CUX_CREATE_DOC_SEQbefore update of STATUS on GL.GL_JE_HEADERSfor each rowwhen (old.status 'P'and new.CURRENCY_CODE 'STAT' AND NEW.ACTUAL_FLAG = 'A')declareVPREFLEX varchar2(20);VSEQ](/uploads/image/z/11695521-57-1.jpg?t=%E8%AF%B7%E8%A7%A3%E9%87%8A%E4%B8%80%E4%B8%8B%E8%BF%99%E4%B8%AA%E9%A2%87%E8%AE%A9oracle%E8%A7%A6%E5%8F%91%E5%99%A8create+or+replace+trigger+CUX_CREATE_DOC_SEQbefore+update+of+STATUS+on+GL.GL_JE_HEADERSfor+each+rowwhen+%28old.status+%27P%27and+new.CURRENCY_CODE+%27STAT%27+AND+NEW.ACTUAL_FLAG+%3D+%27A%27%29declareVPREFLEX+varchar2%2820%29%3BVSEQ)
请解释一下这个颇让oracle触发器create or replace trigger CUX_CREATE_DOC_SEQbefore update of STATUS on GL.GL_JE_HEADERSfor each rowwhen (old.status 'P'and new.CURRENCY_CODE 'STAT' AND NEW.ACTUAL_FLAG = 'A')declareVPREFLEX varchar2(20);VSEQ
请解释一下这个颇让oracle触发器
create or replace trigger CUX_CREATE_DOC_SEQ
before update of STATUS on GL.GL_JE_HEADERS
for each row
when (old.status 'P'
and new.CURRENCY_CODE 'STAT' AND NEW.ACTUAL_FLAG = 'A'
)
declare
VPREFLEX varchar2(20);
VSEQ number;
Orgid number;
Sobid number;
begin
SELECT GJB.ORG_ID
INTO ORGID
FROM GL_JE_BATCHES GJB
WHERE GJB.JE_BATCH_ID = :NEW.JE_BATCH_ID;
Sobid := :NEW.SET_OF_BOOKS_ID;
------------------------------------------------------------------
关键是::NEW 和 :old
IF :new.STATUS = 'P' THEN
select next_je_sequence
into VSEQ
from cux_gl_je_sequence
where SET_OF_BOOKS_ID = :NEW.SET_OF_BOOKS_ID and ORG_ID = Orgid and
PERIOD_NAME = :NEW.PERIOD_NAME
/*for update of next_je_sequence*/;
:new.doc_sequence_value := VSEQ;
update cux_gl_je_sequence
set next_je_sequence = next_je_sequence + 1
where SET_OF_BOOKS_ID = :NEW.SET_OF_BOOKS_ID and ORG_ID = Orgid and
PERIOD_NAME = :NEW.PERIOD_NAME;
END IF;
exception
when no_data_found then
insert into cux_gl_je_sequence
(set_of_books_id,org_id,period_name,next_je_sequence)
values
(:NEW.SET_OF_BOOKS_ID,orgid,:new.period_name,2);
:new.doc_sequence_value := 1;
end;
请解释一下这个颇让oracle触发器create or replace trigger CUX_CREATE_DOC_SEQbefore update of STATUS on GL.GL_JE_HEADERSfor each rowwhen (old.status 'P'and new.CURRENCY_CODE 'STAT' AND NEW.ACTUAL_FLAG = 'A')declareVPREFLEX varchar2(20);VSEQ
触发时间是更新之前,因为是更新,所以涉及到更新前的值和更新的值,这样对于一行数据,就有两个前后的数据.:OLD.字段,表示更新之前原来的值,而:NEW.字段,表示更新的值.
这个清楚后,这个也就好理解了.