我先把我懂的说出来。
更新check_da的ztdm列之前做如下操作
when里面的OLD和NEW不知道是什么意思,OLD是指更新前的ZTBZ列,NEW是指更新后的ZTBZ列是吗?
定义三个变量
获取一个当前的日期给curr_date,dual是否是个临时表?
获取下一个序列给curr_dm
date不为空就把date给id,否则把dm给id
最后一句insert语句,里面的new是指什么
create or replace trigger TRI_CHECK_DA
before update OF ZTDM ON check_da
for each row
when (OLD.ZTDM <> NEW.ZTDM)
declare
CURR_DATE VARCHAR2(8) := NULL;
CURR_DM VARCHAR2(8) := NULL;
CURR_ID VARCHAR2(16) := NULL;
begin
select TO_CHAR(sysdate,'yyyymmdd') into CURR_DATE from dual ;
select TO_CHAR(qt_seq.nextval) into CURR_DM from dual ;
CURR_ID:=CURR_DATE || CURR_DM;
insert into CHECK_DA_LSJL
VALUES (
CURR_ID,
:new.SLDH,
:new.HTZH,
:new.FLH,
:new.WJS,
:new.ZYS,
:new.CZRY,
:new.CZRQ,
:new.LRRY,
:new.LRRQ,
:new.ZTDM,
:new.YHBH,
:new.CZRYLX,
:new.MLH,
:new.LJDW,
:new.AZD
);
END;
更新check_da的ztdm列之前做如下操作
when里面的OLD和NEW不知道是什么意思,OLD是指更新前的ZTBZ列,NEW是指更新后的ZTBZ列是吗?
定义三个变量
获取一个当前的日期给curr_date,dual是否是个临时表?
获取下一个序列给curr_dm
date不为空就把date给id,否则把dm给id
最后一句insert语句,里面的new是指什么
create or replace trigger TRI_CHECK_DA
before update OF ZTDM ON check_da
for each row
when (OLD.ZTDM <> NEW.ZTDM)
declare
CURR_DATE VARCHAR2(8) := NULL;
CURR_DM VARCHAR2(8) := NULL;
CURR_ID VARCHAR2(16) := NULL;
begin
select TO_CHAR(sysdate,'yyyymmdd') into CURR_DATE from dual ;
select TO_CHAR(qt_seq.nextval) into CURR_DM from dual ;
CURR_ID:=CURR_DATE || CURR_DM;
insert into CHECK_DA_LSJL
VALUES (
CURR_ID,
:new.SLDH,
:new.HTZH,
:new.FLH,
:new.WJS,
:new.ZYS,
:new.CZRY,
:new.CZRQ,
:new.LRRY,
:new.LRRQ,
:new.ZTDM,
:new.YHBH,
:new.CZRYLX,
:new.MLH,
:new.LJDW,
:new.AZD
);
END;
/*
一个before触发器
更新check_da表的ztdm列
条件:OLD.ZTDM <> NEW.ZTDM,也就是ztdm值改变
CURR_ID这个值是将系统时间转为字符串连接到序列的值(也是字符串)
最后将他们添加到一个表中CHECK_DA_LSJL
注意:
when (OLD.ZTDM <> NEW.ZTDM)条件里面不能引用:OLD.ZTDM或者:NEW.ZTDM
而在下面的begin end主体部分,不能使用new,old引用值
序列首次引用必须:sequence.nextval
*/
正是dual是否是个临时表?
dual是一个系统预定义的一个表,它只有一列DUMMY,就当它是一个普通表。
也可改为:CURR_DATE := TO_CHAR(SYSDATE, 'yyyymmdd');最后一句insert语句,里面的new是指什么
引发触发器时表check_da各字段的新值