ITPub博客

首页 > 数据库 > Oracle > 创建触发器

创建触发器

原创 Oracle 作者:skyin_1603 时间:2016-11-13 23:45:59 0 删除 编辑

这里简单讲述创建一个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博客 ” ,链接:https://blog.itpub.net/31392094/viewspace-2128380/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 创建函数
请登录后发表评论 登录
全部评论

注册时间:2016-09-06

  • 博文量
    231
  • 访问量
    215114