您当前的位置: 首页 > 数据库教程 > Oracle教程 > oracle数据库如何创建触发器实例

oracle数据库如何创建触发器实例

作者:不详 来源:网络 发布时间: 2014-09-08 21:55 点击:
Oracle DBA Studio 工具里面就能创建触发器 CREATE TRIGGER 名称 CREATE TRIGGER 创建一个新触发器 语法 CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] } ON table FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE func ( arguments ) 输入 name 触发器名

oracle数据库如何创建触发器实例

  Oracle DBA Studio 工具里面就能创建触发器

  CREATE TRIGGER

  名称

  CREATE TRIGGER — 创建一个新触发器  

   

  语法

  CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }

          ON table FOR EACH { ROW | STATEMENT }

          EXECUTE PROCEDURE func ( arguments )

  输入

  name  

  触发器名称.  

  table  

  表名称.  

  event  

  INSERT,DELETE 或 UPDATE 之一.  

  funcname  

  一个用户提供的函数.  

   

  输出

  CREATE  

  如果触发器成功创建,返回此信息.  

   

  描述

  CREATE TRIGGER 将向现有数据库中增加一个新的触发器.触发器将与表 table 相联并且将执行声明的函数 funcname.  

  触发器可以声明为在对记录进行操作之前(在检查约束之前和 INSERT,UPDATE 或 DELETE 执行前)或之后(在检查约束之后和完成了 INSERT,UPDATE 或 DELETE 操作)触发.如果触发器在事件之前,触发器可能略过当前记录的操作或改变被插入的(当前)记录(只对 INSERT 和 UPDATE 操作有效).如果触发器在事件之后,所有更改,包括最后的插入,更新或删除对触发器都是"可见"的.  

   

  请参考 PostgreSQL 程序员手册 中SPI 和触发器章节获取更多信息.  

   

  注意

  CREATE TRIGGER 是一个 Postgres 语言扩展.  

  只有表所有者可以就此表创建一个触发器.  

   

  在当前的版本(v7.0),STATEMENT 触发器还没有实现.  

     

   

  请参考 DROP TRIGGER 获取如何删除触发器的信息.  

   

  用法

  在插入或更新表 films 之前检查一下声明的分销商代码是否存在于 distributors 表中:  

  CREATE TRIGGER if_dist_exists

          BEFORE INSERT OR UPDATE ON films FOR EACH ROW

          EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did');

  在删除或更新一个分销商的内容之前,将所有记录移到表 films 中(译注:好象与例子意义不同):  

  CREATE TRIGGER if_film_exists  

          BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW

          EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did');

  兼容性

  SQL92

  在 SQL92 里没有 CREATE TRIGGER 语句.  

  上面第二个例子可以使用一个 FOREIGN KEY 约束实现:  

   

  CREATE TABLE distributors (

          did           DECIMAL(3),

          name         VARCHAR(40),

          CONSTRAINT if_film_exists

          FOREIGN KEY(did) REFERENCES films

          ON UPDATE CASCADE ON DELETE CASCADE    

  );

  实例

  create trigger tri_emp

    after insert on employees

    for each row

    insert into new values(:new.sno,:new.sname,:new.sex,:new.depart)

    --------------

    create trigger tri_emp_delete

    after delete on employees

    for each row

    delete from new where sno=:old.sno

    --------------

    create trigger tri_emp_update

    after update on employees

    for each row

    begin

    delete from new where sno=:old.sno;

    insert into new values(:new.sno,:new.sname,:new.sex,:new.depart);

    end;

    --------------

    注意;的使用,如果在begin和end子句中有多条语句的话,每条句子后面都应该有一个分号

  最近最一个oracle的项目,需要自定义生成触发器,但是在组装的SQL语句生成的触发器却始终出现错误。将生产的SQL语句拿到SQLPLUS去执行(oracle 10g),出现

  错误:Warning: Trigger created with compilation errors.

     进到企业管理器去查看触发器,会发现如下错误:

     “ Line # = 2 Column # = 128 Error Text = PL/SQL: ORA-00984: column not allowed here

        Line # = 2 Column # = 1 Error Text = PL/SQL: SQL Statement ignored

    ”

     确实不知道是什么错误,通过网络搜索“ column not allowed here”,有人说是字符(char)、整形的

  类型转换问题,但这个问题如何解决呢?

     测试用表使用了两张字段相同的表,分别命名为userinfo_old,uerinfo_new.

    SQL生成的触发器如下:

  create trigger test_trigger

              after insert on userinfo_old

  for each row

      begin

            insert into userinfo_new values (userinfo_old.userid,userinfo_old.username,userinfo_old.userpass,userinfo_old.sex,userinfo_old.userqq);

       end;
分享到:
本文"oracle数据库如何创建触发器实例"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4