Create Trigger(建立DML/DDL触发器)

CREATE OR REPLACE TRIGGER loc_dtl_monitor
BEFORE INSERT OR UPDATE OR DELETE
ON loc_dtl
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
INSERT INTO loc_dtl_new(LOC,ITEM_NO,QLT,LOT_NO,VERSION,FLAG,
DATECODE,BRANCH,VENDOR,PLT_QTY,ACT_QTY,IN_DTE,IN_TIM,CHK_DTE,CHK_TIM,REMARK,GET_TIME)
values(:OLD.LOC,:OLD.ITEM_NO,:OLD.QLT,:OLD.LOT_NO,:OLD.VERSION,:OLD.FLAG,:OLD.DATECODE,:OLD.BRANCH,
:OLD.VENDOR,:OLD.PLT_QTY,:OLD.ACT_QTY,:OLD.IN_DTE,:OLD.IN_TIM,:OLD.CHK_DTE,:OLD.CHK_TIM,:OLD.REMARK,SYSDATE);
END;
/

[@more@]

CREATE OR REPLACE TRIGGER loc_dtl_monitor
BEFORE INSERT OR UPDATE OR DELETE
ON loc_dtl
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
INSERT INTO loc_dtl_new(LOC,ITEM_NO,QLT,LOT_NO,VERSION,FLAG,
DATECODE,BRANCH,VENDOR,PLT_QTY,ACT_QTY,IN_DTE,IN_TIM,CHK_DTE,CHK_TIM,REMARK,GET_TIME)
values(:OLD.LOC,:OLD.ITEM_NO,:OLD.QLT,:OLD.LOT_NO,:OLD.VERSION,:OLD.FLAG,:OLD.DATECODE,:OLD.BRANCH,
:OLD.VENDOR,:OLD.PLT_QTY,:OLD.ACT_QTY,:OLD.IN_DTE,:OLD.IN_TIM,:OLD.CHK_DTE,:OLD.CHK_TIM,:OLD.REMARK,SYSDATE);
END;
/

------------------------------------------------------------------------------------------
CREATE OR REPLACE TRIGGER loc_dtl_monitor
BEFORE INSERT OR UPDATE OR DELETE
ON loc_dtl
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
IF INSERTING OR UPDATING THEN
INSERT INTO loc_dtl_new(LOC,ITEM_NO,QLT,LOT_NO,VERSION,FLAG,
DATECODE,BRANCH,VENDOR,PLT_QTY,ACT_QTY,IN_DTE,IN_TIM,CHK_DTE,CHK_TIM,REMARK,GET_TIME)
values(:NEW.LOC,:NEW.ITEM_NO,:NEW.QLT,:NEW.LOT_NO,:NEW.VERSION,:NEW.FLAG,:NEW.DATECODE,:NEW.BRANCH,
:NEW.VENDOR,:NEW.PLT_QTY,:NEW.ACT_QTY,:NEW.IN_DTE,:NEW.IN_TIM,:NEW.CHK_DTE,:NEW.CHK_TIM,:NEW.REMARK,SYSDATE);
ELSIF DELETING THEN
INSERT INTO loc_dtl_new(LOC,ITEM_NO,QLT,LOT_NO,VERSION,FLAG,
DATECODE,BRANCH,VENDOR,PLT_QTY,ACT_QTY,IN_DTE,IN_TIM,CHK_DTE,CHK_TIM,REMARK,GET_TIME)
values(:OLD.LOC,:OLD.ITEM_NO,:OLD.QLT,:OLD.LOT_NO,:OLD.VERSION,:OLD.FLAG,:OLD.DATECODE,:OLD.BRANCH,
:OLD.VENDOR,:OLD.PLT_QTY,:OLD.ACT_QTY,:OLD.IN_DTE,:OLD.IN_TIM,:OLD.CHK_DTE,:OLD.CHK_TIM,:OLD.REMARK,SYSDATE);
END;
/


Insert into smpasrs.loc_dtl(LOC,ITEM_NO,QLT,LOT_NO,FLAG,DATECODE,BRANCH,VENDOR,PLT_QTY,ACT_QTY,IN_DTE,IN_TIM)
VALUES('AAAAAA','BBBBBB','G','A','0','20091005','d888','8888',8888,8888,'20091005',to_char(sysdate,'yyyymmdd'))

UPDATE LOC_DTL SET LOC='BBBBBB' WHERE ITEM_NO='BBBBBB';

DELETE LOC_DTL WHERE ITEM_NO='BBBBBB' AND IN_TIM='20091105';

SELECT * from LOC_DTL WHERE ITEM_NO='BBBBBB';


SELECT * from LOC_DTL_NEW

------------------------------------------
CREATE OR REPLACE TRIGGER LOC_DTL_MONITOR
BEFORE DELETE OR INSERT OR UPDATE
ON SMPASRS.LOC_DTL
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN

IF INSERTING THEN

INSERT INTO SMPASRS.loc_dtl_new(LOC,ITEM_NO,QLT,LOT_NO,VERSION,FLAG,
DATECODE,BRANCH,VENDOR,PLT_QTY,ACT_QTY,IN_DTE,IN_TIM,CHK_DTE,CHK_TIM,REMARK,GET_TIME,ACTION)
values(:NEW.LOC,:NEW.ITEM_NO,:NEW.QLT,:NEW.LOT_NO,:NEW.VERSION,:NEW.FLAG,:NEW.DATECODE,:NEW.BRANCH,
:NEW.VENDOR,:NEW.PLT_QTY,:NEW.ACT_QTY,:NEW.IN_DTE,:NEW.IN_TIM,:NEW.CHK_DTE,:NEW.CHK_TIM,:NEW.REMARK,SYSDATE,'INSERTING');

ELSIF UPDATING THEN

INSERT INTO SMPASRS.loc_dtl_new(LOC,ITEM_NO,QLT,LOT_NO,VERSION,FLAG,
DATECODE,BRANCH,VENDOR,PLT_QTY,ACT_QTY,IN_DTE,IN_TIM,CHK_DTE,CHK_TIM,REMARK,GET_TIME,ACTION)
values(:OLD.LOC,:OLD.ITEM_NO,:OLD.QLT,:OLD.LOT_NO,:OLD.VERSION,:OLD.FLAG,:OLD.DATECODE,:OLD.BRANCH,
:OLD.VENDOR,:OLD.PLT_QTY,:OLD.ACT_QTY,:OLD.IN_DTE,:OLD.IN_TIM,:OLD.CHK_DTE,:OLD.CHK_TIM,:OLD.REMARK,SYSDATE,'UPDATING');

ELSIF DELETING THEN

INSERT INTO SMPASRS.loc_dtl_new(LOC,ITEM_NO,QLT,LOT_NO,VERSION,FLAG,
DATECODE,BRANCH,VENDOR,PLT_QTY,ACT_QTY,IN_DTE,IN_TIM,CHK_DTE,CHK_TIM,REMARK,GET_TIME,ACTION)
values(:OLD.LOC,:OLD.ITEM_NO,:OLD.QLT,:OLD.LOT_NO,:OLD.VERSION,:OLD.FLAG,:OLD.DATECODE,:OLD.BRANCH,
:OLD.VENDOR,:OLD.PLT_QTY,:OLD.ACT_QTY,:OLD.IN_DTE,:OLD.IN_TIM,:OLD.CHK_DTE,:OLD.CHK_TIM,:OLD.REMARK,SYSDATE,'DELETING');

END IF;

END;
/

---------------------------------------------------------

用触发器监控数据库的DDL操作(转)

-- Create table
create table DDL_LOG
(
USER_NAME VARCHAR2(30),
DDL_DATE DATE,
DDL_TYPE VARCHAR2(30),
OBJECT_TYPE VARCHAR2(18),
OWNER VARCHAR2(30),
OBJECT_NAME VARCHAR2(128),
IP_ADDRESS VARCHAR2(40),
OSUSER VARCHAR2(30),
TERMINAL VARCHAR2(30)
);


--Create trigger
CREATE OR REPLACE TRIGGER ddl_trigger
AFTER DDL
ON DATABASE

BEGIN
INSERT INTO ddl_log
(user_name,
ddl_date,
ddl_type,
object_type,
owner,
object_name,
ip_address,
osuser,
terminal)
VALUES
(ora_login_user,
SYSDATE,
ora_sysevent,
ora_dict_obj_type,
ora_dict_obj_owner,
ora_dict_obj_name,
SYS_CONTEXT('USERENV', 'IP_ADDRESS'),
SYS_CONTEXT('USERENV', 'OS_USER'),
SYS_CONTEXT('USERENV', 'TERMINAL'));
END ddl_trigger;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/789833/viewspace-1029241/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/789833/viewspace-1029241/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值