自己第一次写触发器(oracle)
触发器1(tr_baseinfo_oplist):
当sto_base_info表执行INSERT,UPDATE,DELETE的时候(delete非物理删除),
执行触发器往STO_STORE_OP_LIST里记录一下操作日志(这里delete是修改is_delete)
CREATE OR REPLACE TRIGGER tr_baseinfo_oplist
AFTER INSERT OR UPDATE //在操作执行之后触发事件
ON sto_base_info //在sto_base_info表上触发
FOR EACH ROW //以行
BEGIN //下面就是具体的执行逻辑了
case
when updating then //当执行修改操作时执行
if :new.is_delete != :old.is_delete THEN//判断是不是删除操作 is_delete='0'为正常
if :new.is_delete != '0' then
INSERT INTO STO_STORE_OP_LIST(store_id ,op_code,op_datetime)
VALUES(:new.store_id,'DELETE',systimestamp);
end if;
else//不是删除就是修改了
INSERT INTO STO_STORE_OP_LIST(store_id ,op_code,op_datetime)
VALUES(:new.store_id,'UPDATE',systimestamp);
end if;
when inserting then //当新增的时候执行
INSERT INTO STO_STORE_OP_LIST(store_id ,op_code,op_datetime)
VALUES(:new.store_id,'INSERT',systimestamp);
end case;
END;
触发器2(tr_income_oplist):
当STO_INCOME_SETTING表执行INSERT,UPDATE,DELETE的时候,
执行触发器往STO_INCOMING_OP_LIST里记录一下操作日志
create or replace trigger tr_income_oplist
before INSERT OR UPDATE OR DELETE //在操作执行之前触发事件
ON STO_INCOME_SETTING
FOR EACH ROW
BEGIN
CASE
when updating then
INSERT INTO STO_INCOMING_OP_LIST(record_id ,op_code,op_datetime)
VALUES(:new.id,'UPDATE',systimestamp);
when inserting then
INSERT INTO STO_INCOMING_OP_LIST(record_id ,op_code,op_datetime)
VALUES(:new.id,'INSERT',systimestamp);
when deleting then
delete from STO_INCOMING_OP_LIST where record_id= :old.id;
INSERT INTO STO_INCOMING_OP_LIST(record_id ,op_code,op_datetime)
VALUES(:old.id,'DELETE',systimestamp);
END CASE;
END;
此处特别注意:
关键字:
:NEW 和:OLD使用方法和意义,new 只出现在insert和update时,old只出现在update和delete时。
在insert时new表示新插入的行数据,update时new 表示要替换的新数据、
old表示要被更改的原来的数据行,delete时old表示要被删除的数据。
在触发器中不必使用commit。
自己第一次写触发器(oracle)-一个简单的触发器
原创
©著作权归作者所有:来自51CTO博客作者panguixiang的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
一个简单的Oracle触发器示例
本文通过示例描述Oracle中的触发器的写法,旨在描述一个简单记录监控日志的的触发器的写法。希望对初学者能有帮助.
Oracle 数据库 触发器 Oracle 休闲 -
第一次用到的触发器写法与使用链接
[https://
.net java -
一个触发器问题
程序提示无法编译回收站中的触发器:ORA-04045: errors during recompilation/revalidation of CENTER_ADMIN.BIN$qHuI3fcTuU7gQBKseAFC9A==$0。
oracle 10g trigger compile recyclebin -
oracle触发器
关键字:oracle触发器说明:oracle 触发器 和 mysql触发器 语法大致相同 不过 其中 new和ol
数据库 触发器 oracle 创建表