首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

oracle 触发器的品种和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器

2013-02-27 
oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器,ld.字段名或:new.字段名?

oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器,

      ld.字段名或:new.字段名?
      * 触发器体内禁止使用COMMIT、ROLLBACK、SAVEPOINT语句,也禁止直接或间接地调用含有上述语句的存储过程。?
      定义一个触发器时要考虑上述多种情况,并根据具体的需要来决定触发器的种类。?
      DML触发器的创建?
      创建DML触发器需要CREATE TRIGGER系统权限。创建DML触发器的语法如下:?
      CREATE [OR REPLACE] TRIGGER 触发器名?
      {BEFORE|AFTER|INSTEAD OF} 触发事件1 [OR 触发事件2...]?
      ON 表名?
      WHEN 触发条件?
      [FOR EACH ROW]?
      DECLARE?
      声明部分?
      BEGIN?
      主体部分?
      END;?
      其中:?
      OR REPLACE:表示如果存在同名触发器,则覆盖原有同名触发器。?
      BEFORE、AFTER和INSTEAD OF:说明触发器的类型。?
      WHEN 触发条件:表示当该条件满足时,触发器才能执行。?
      触发事件:指INSERT、DELETE或UPDATE事件,事件可以并行出现,中间用OR连接。?
      对于UPDATE事件,还可以用以下形式表示对某些列的修改会引起触发器的动作:?
      UPDATE OF 列名1,列名2...?
      ON 表名:表示为哪一个表创建触发器。?
      FOR EACH ROW:表示触发器为行级触发器,省略则为语句级触发器。?
      触发器的创建者或具有DROP ANY TIRGGER系统权限的人才能删除触发器。删除触发器的语法如下:?
      DROP TIRGGER 触发器名?
      可以通过命令设置触发器的可用状态,使其暂时关闭或重新打开,即当触发器暂时不用时,可以将其置成无效状态,在使用时重新打开。该命令语法如下:?
      ALTER TRIGGER 触发器名 {DISABLE|ENABLE}?
      其中,DISABLE表示使触发器失效,ENABLE表示使触发器生效。?
      同存储过程类似,触发器可以用SHOW ERRORS 检查编译错误。?
      行级触发器的应用?
      在行级触发器中,SQL语句影响的每一行都会触发一次触发器,所以行级触发器往往用在对表的每一行的操作进行控制的场合。若在触发器定义中出现FOR EACH ROW子句,则为语句级触发器。?
      【训练1】? 创建包含插入、删除、修改多种触发事件的触发器DML_LOG,对EMP表的操作进行记录。用INSERTING、DELETING、UPDATING谓词来区别不同的DML操作。?
      在创建触发器之前,需要先创建事件记录表LOGS,该表用来对操作进行记录。该表的字段含义解释如下:?
      LOG_ID:操作记录的编号,数值型,它是该表的主键,由序列自动生成。?
      LOG_TABLE:进行操作的表名,字符型,非空,该表设计成可以由多个触发器共享使用。比如我们可以为dept表创建类似的触发器,同样将操作记录到该表。?
      LOG_DML:操作的动作,即INSERT、DELETE或UPDATE三种之一。?
      LOG_KEY_ID:操作时表的主键值,数值型。之所以记录表的主键,是因为主键是表的记录的惟一标识,可以识别是对哪一条记录进行了操作。对于emp表,主键是empno。?
      LOG_DATE:操作的日期,日期型,取当前的系统时间。?
      LOG_USER:操作者,字符型,取当时的操作者账户名。比如登录SCOTT账户进行操作,在该字段中,记录账户名为SCOTT。?
      步骤1:在SQL*Plus中登录STUDENT账户,创建如下的记录表LOGS:?

                                                                                                                                                              1. 已删除?1?行。??
                                                                                                                                                              2. 已创建?1?行。??
                                                                                                                                                              3. 已更新?1?行。??
                                                                                                                                                              4. 提交完成。???


                                                                                                                                                              步骤4:检查emp表和employee表中被插入、删除和更新的雇员。?
                                                                                                                                                              运行结果略,请自行验证。?
                                                                                                                                                              ? 说明:在触发器中判断触发事件,根据不同的事件对employee表进行不同的操作。?
                                                                                                                                                              【练习1】创建一个emp表的触发器EMP_TOTAL,每当向雇员表插入、删除或更新雇员信息时,将新的统计信息存入统计表EMPTOTAL,使统计表总能够反映最新的统计信息。?
                                                                                                                                                              统计表是记录各部门雇员总人数、总工资的统计表,结构如下:?
                                                                                                                                                              部门编号 number(2)?
                                                                                                                                                              总人数 number(5)?
                                                                                                                                                              总工资 number(10,2)?
                                                                                                                                                              练习?
                                                                                                                                                              1. 下列有关触发器和存储过程的描述,正确的是:?
                                                                                                                                                              A. 两者都可以传递参数?
                                                                                                                                                              B. 两者都可以被其他程序调用?
                                                                                                                                                              C. 两种模块中都可以包含数据库事务语句?
                                                                                                                                                              D. 两者创建的系统权限不同?
                                                                                                                                                              2. 下列事件,属于DDL事件的是:?
                                                                                                                                                              ??? A.? INSERT B.? LOGON?
                                                                                                                                                              ??? C.? DROP D.? SERVERERROR?
                                                                                                                                                              3. 假定在一个表上同时定义了行级和语句级触发器,在一次触发当中,下列说法正确的是:?
                                                                                                                                                              ??? A. 语句级触发器只执行一次?
                                                                                                                                                              ??? B. 语句级触发器先于行级触发器执行?
                                                                                                                                                              ?????????? C. 行级触发器先于语句级触发器执行?
                                                                                                                                                              ??????????????? D. 行级触发器对表的每一行都会执行一次?
                                                                                                                                                              4. 有关行级触发器的伪记录,下列说法正确的是:?
                                                                                                                                                              ?? A.? INSERT事件触发器中,可以使用:old伪记录。?
                                                                                                                                                              ?? B.? DELETE事件触发器中,可以使用:new伪记录。?
                                                                                                                                                              ?? C.? UPDATA事件触发器中,只能使用:new伪记录。?
                                                                                                                                                              ??????????????? D.? UPDATA事件触发器中,可以使用:old伪记录。?
                                                                                                                                                              5. 下列有关替代触发器的描述,正确的是:?
                                                                                                                                                              ??? A. 替代触发器创建在表上?
                                                                                                                                                              ??????????????? B. 替代触发器创建在数据库上?
                                                                                                                                                              ??????????????? C. 通过替代触发器可以向基表插入数据?
                                                                                                                                                              ??????????????? D. 通过替代触发器可以向视图插入数据?

                                                                                                                                                              黑色头发:http://heisetoufa.iteye.com/

热点排行