创建触发器

这里简单讲述创建一个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表中deptno32记录中的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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值