实验六 触发器实验报告
- 格式:doc
- 大小:12.50 KB
- 文档页数:3
实验六触发器实验报告
触发器实验报告
[实验目的]1、理解Oracle触发器的种类和用途2、掌握行级触发器的编写
[预备知识]1、 PL/SQL程序设计
[实验原理]1、建立触发器 CREATE
[OR REPLACE] TRIGGER <触发器名> BEFORE|AFTER
INSERT|DELETE|UPDATE OF <列名> ON <表名>
[FOR EACH ROW] WHEN (<条件>)
( INSERT、 DELETE 或 UPDATE)
AFTER 指定了触发器在处理完成后触发 BEFORE 指定了触发器在处理完成前触发默认情况下,触发器每个表触发一次 FOR EACH ROW 选项指定触发器每行触发一次(即触发器为行级触发器)要使触发器触发,WHEN 子句中布尔型表达式的值必须判定为 TRUE 可以将 REPLACE 添加到 CREATE 语句以自动删除和重建触发器2、行级触发器中引用表数据在行级触发器中,使用伪记录来表示旧数据:old和新数据:new 触发事件 :old :new Insert 无定义,所有字段都是NULL该语句完成后插入的值 Update 更新前该行的旧值更新后该行的值 Delete 删除前该行的值无定
义,所有字段都是NULL引用示例::new、
customer_name, :old、customer_name3、行级触发器中的谓词在一个多条件触发的触发器中,使用谓词可以区分当前触发的操作的类型: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。
[实验内容]1、给Customer表增加一列Savings,类型为int,来存放每个顾客的存款总额。A LTER TABLE customer ADD (saving varchar2(30));select * from customer;2、更新Customer表,使得Savings字段的值正确。
3、在Account表上增加一个行级触发器,当对account的balance进行update和insert一个记录时同步修改Customer的Savings字段,保证数据的一致性。
4、对account进行update操作,记录account表和customer表的变化。
5、去掉顾客-存款账号表中引用account表的外键约束(如果不去掉,后面的操作无法实现。当然最佳的方法是修改其外键约束的更新策略,但考虑到复杂性,这里使用不标准的做法,但建议大家实际运用中不要这么做)。在顾客-存款账号表插入一条记录,表明顾客开设了一个新的账户。
6、将一条刚才新开账户号的存款记录插入账号表,记录account表和customer表的变化。
[实验总结]1、实验中遇到的问题和解决的方法。