/*
语句触发器与一些特定的语句相关,例如INSERT,UPDATE,DELETE语句等等,可以使用CREATE TRIGGER语句创建触发器,格式如下:
CREATE[OR REPLACE] TRIGGER
<触发器名>
[BEFORE|AFTER]
<触发事件>
ON
<表名>
*/
--在SqlPlus中创建两张用于测试的表
drop table testTrigger;
drop table testlog;
drop trigger TRI_TESTTRIGER;
--创建表
create table testTrigger(
id number(5),
name number(3)
);
--创建日志表
create table testlog(
action varchar2(50),
act_time date
);
--创建一个触发器,当用户产生INSERTING,UPDATING,DELETING数据的时候,都会产生相应的日志
CREATE OR REPLACE TRIGGER TRI_TESTTRIGER
AFTER INSERT OR UPDATE OR DELETE
ON TESTTRIGGER
DECLARE
V_ACTION VARCHAR2(10);
BEGIN
IF INSERTING THEN V_ACTION := '
INSERT';
ELSIF UPDATING THEN V_ACTION := '
UPDATE';
ELSIF DELETING THEN V_ACTION := '
DELETE';
ELSE V_ACTION :='
OTHER';
END IF;
INSERT INTO TESTLOG VALUES(V_ACTION,SYSDATE);
END;
/
--在testTrigger表中执行insert、update、delete语句
SQL> insert into testTrigger values(1,1);
已创建 1 行。
SQL> update testtrigger set id=2;
已更新 1 行。
SQL> delete testtrigger where id=2;
已删除 1 行。
--查询testlog表中是否有记录
SQL> select * from testlog;
ACTION ACT_TIME
-------------------------------------------------- --------------
INSERT 17-4月 -11
UPDATE 17-4月 -11
DELETE 17-4月 -11
--当操作回退的时候,触发器所产生的TESTLOG也被回退掉了
SQL> rollback;
回退已完成。
SQL> select * from testlog;
未选定行