BEFORE
INSERT ON myView BEGIN
B.CREATE TRIGGER mytrigger AFTER
INSERT ON myView BEGIN
C.CREATE TRIGGER mytrigger INSTEAD OF
INSERT ON myView BEGIN
D.以上都不对 二、填空题
1.创建和替换触发器的语句是 CREATE OR REPLACE TRIGGER ,删除触发器的语句是 DROP TRIGGER 。
2.在触发器定义中,可以使用 OLD 引用修改前的数据,使用 NEW 引用新插入的数据。
3.假设有一个表TEST,它仅包含一个字段DATA.现在创建一个触发器,实现将添加的数据变为大写,请在空白处填写适当的语句。 create or replace trigger test_trigger
after INSERT on TEST for each row being
:new.data:=upper( :NEW.DATA ); end;
4. BEFORE 和 AFTER 指定了触发器的触发时间。当为一个表配置了约束时,它们将会特别有用, BEFORE 可以规定Oracle在应用约束前调用触发器,而 AFTER 规定在应用约束后调用触发器。 三、问答题
1.描述一个触发器包括哪几部分及其作用? 解:
触发器主要由触发器名称、触发语句 、触发时间、触发事件、触发级别等组成。
(1)触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
(2)触发时间:指明触发器何时执行,该值可取: BEFORE---表示在数据库动作之前触发器执行; AFTER---表示在数据库动作之后出发器执行。
49
(3)触发事件:指明哪些数据库动作会触发此触发器,具体有: INSERT:数据库插入会触发此触发器; UPDATE:数据库修改会触发此触发器; DELETE:数据库删除会触发此触发器。
2.Oracle 11g有几种触发器,它们的作用是什么? 解:
Oracle主要有三种触发器:DML触发器,instead-of触发器和系统触发器。
(1)DML触发器由DML语句触发,语句的类型确定DML触发器的类型,可以定义为INSERT,UPDATE,DELETE操作,可以在操作之前或之后被触发。
(2)instead-of触发器定义在view上,它允许修改一个本来不可修改的视图。INSTEAD OF 触发器是在视图上而不是在表上定义的触发器,它是用来替换所使用实际语句的触发器。
(3)系统触发器在DDL事件或者数据库事件(比如用户登陆注销,服务器错误等等)上触发。
系统触发器分模式触发器和数据库触发器,模式触发器只有当前的触发事件以指定模式发生时才会触发,可以在模式级的操作上建立触发器,如:create ,alter,drop,grant,revoke 和truncate 等 DDL语句,如果触发器使用ON SCHEMA,该触发器属于模式触发器,如果使用ON DATABASE的话,就不依赖于模式属于数据库触发器,所有的用户都会触发。
3.什么是Oracle的触发器中触发器事件? 解:
触发事件:指明哪些数据库动作会触发此触发器,具体有: INSERT:数据库插入会触发此触发器; UPDATE:数据库修改会触发此触发器; DELETE:数据库删除会触发此触发器。
4.比较触发器与存储过程的异同点。 解:
触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须有用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关。当一行被插入、更新或者删除时触发器才执行,同时还取决于触发器是怎样创建的,当UPDATE发生时使用一个更新触发器,当INSERT发生时使用一个插入触发器,当DELETE发生时使用一个删除触发器。
50