文档介绍:实验五触发器实验报告
[实验目的]
1. 理解Oracle触发器的种类和用途
2. 掌握行级触发器的编写
[预备知识]
1. PL/SQL程序设计
[实验原理]
1. 建立触发器
CREATE [OR REPLACE] TRIGGER <触发器名>
BEFORE|AFTER
INSERT|DELETE|UPDATE OF <列名> ON <表名>
[FOR EACH ROW]
WHEN (<条件>)
<PL/SQL 程序块>
ON 子句中的名称识别与数据库触发器关联的数据库表
触发器事件指定了影响表的 SQL DML 语句( INSERT、 DELETE 或 UPDATE)
AFTER 指定了触发器在处理完成后触发
BEFORE 指定了触发器在处理完成前触发
默认情况下,触发器每个表触发一次
FOR EACH ROW 选项指定触发器每行触发一次(即触发器为行级触发器)
要使触发器触发,WHEN 子句中布尔型表达式的值必须判定为 TRUE
可以将 REPLACE 添加到 CREATE 语句以自动删除和重建触发器
2. 行级触发器中引用表数据
在行级触发器中,使用伪记录来表示旧数据:old和新数据:new
触发事件
:old
:new
Insert
无定义,所有字段都是NULL
该语句完成后插入的值
Update
更新前该行的旧值
更新后该行的值
Delete
删除前该行的值
无定义,所有字段都是NULL
引用示例::, :
3. 行级触发器中的谓词
在一个多条件触发的触发器中,使用谓词可以区分当前触发的操作的类型:inserting,updating,deleting。
示例:
IF Inserting THEN
语句;
END IF;
IF Updating THEN
语句;
END IF; IF Deleting THEN
语句;
END IF;
4. 触发器的限制
SELECT 语句必须是 SELECT INTO 语句或内部游标声明。
行级触发器不可以对触发表进行查询,包括其调用的子过程中。
不允许 DDL 声明和事务控制语句。
如果由触发器调用存储子过程,则存储子程序不能包括事务控制语句。
:old 和:new 值的类型不能是 LONG 和 LONG RAW。
[实验内容]
给Cu