这里简单讲述创建一个DML类触发器,来触发把更新表dept前后的数据以及时间
的信息记录到一个记录表中。
----创建简单的触发器:
---创建出发事件存储表:
scott@PROD>create table dept_change(
2 v_deptno number(10),
3 v_name varchar2(14),
4 oldaddr varchar2(13),
5 newaddr varchar2(13),
6 time_change date);
Table created.
#表已经创建。
--查看表结构:
scott@PROD>desc dept_change;
Name Null? Type
----------------------------------------- -------- ----------------------------
V_DEPTNO NUMBER(10)
V_NAME VARCHAR2(14)
OLDADDR VARCHAR2(13)
NEWADDR VARCHAR2(13)
TIME_CHANGE DATE
--创建触发器:
scott@PROD>create or replace trigger dept_chang
2 after update of loc on dept
3 for each row
4 begin
5 insert into dept_change
6 values(:old.deptno,:old.dname,:old.loc,:new.loc,sysdate);
7 end dept_chang;
8 /
Trigger created.
#触发器已经成功创建。
--查看刚创建的触发器:
scott@PROD>col object_name for a16;
scott@PROD>select object_name,object_type,status
2 from user_objects
3 where object_name like 'DEPT%';
OBJECT_NAME OBJECT_TYPE STATUS
---------------- ------------------- -------
DEPT TABLE VALID
DEPT_CHANG TRIGGER VALID
DEPT_CHANGE TABLE VALID
#可以看到有一个对象名为DEPT_CHANG 的触发器。
--尝试修改Scott用户dept表中deptno为32记录中的loc字段:
scott@PROD>update dept set loc ='beijing'
2 where deptno =32;
1 row updated.
scott@PROD>commit;
Commit complete.
#已经修改成功。
--尝试查看记录表dept更新信息的表dept-change:
scott@PROD>select * from dept_change;
V_DEPTNO V_NAME OLDADDR NEWADDR TIME_CHANGE
---------- -------------- ------------- ------------- -------------------
32 clerk sahnghai beijing 2016-11-13 22:07:51
--在尝试修改一次不提交:
scott@PROD>update dept set loc ='guangzhou'
2 where deptno =32;
1 row updated.
#已更改未提交。
--查看表dept-change的记录:
scott@PROD>select * from dept_change;
V_DEPTNO V_NAME OLDADDR NEWADDR TIME_CHANGE
---------- -------------- ------------- ------------- -------------------
32 clerk sahnghai beijing 2016-11-13 22:07:51
32 clerk beijing guangzhou 2016-11-13 22:11:01
#虽然未提交,但已经产生记录。
--取消rollback:
scott@PROD>rollback;
Rollback complete.
#取消成功。
--再次查看表dept-change的记录:
scott@PROD>select * from dept_change;
V_DEPTNO V_NAME OLDADDR NEWADDR TIME_CHANGE
---------- -------------- ------------- ------------- -------------------
32 clerk sahnghai beijing 2016-11-13 22:07:51
#取消修改后,触发器的事件也随着取消,记录表中的记录也取消。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31392094/viewspace-2128380/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31392094/viewspace-2128380/