实验六 触发器实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五 触发器实验报告

[实验目的]

1. 理解Oracle 触发器的种类和用途

2. 掌握行级触发器的编写

[预备知识]

1. PL/SQL 程序设计

[实验原理]

1. 建立触发器

CREA TE [OR REPLACE] TRIGGER <触发器名>

BEFORE|AFTER

INSERT|DELETE|UPDA TE OF <列名> ON <表名>

[FOR EACH ROW]

WHEN (<条件>)

ON 子句中的名称识别与数据库触发器关联的数据库表

触发器事件指定了影响表的 SQL DML 语句 ( INSERT 、 DELETE 或 UPDA TE) AFTER 指定了触发器在处理完成后触发

BEFORE 指定了触发器在处理完成前触发

默认情况下,触发器每个表触发一次

FOR EACH ROW 选项指定触发器每行触发一次(即触发器为行级触发器) 要使触发器触发,WHEN 子句中布尔型表达式的值必须判定为 TRUE

可以将 REPLACE 添加到 CREA TE 语句以自动删除和重建触发器

2. 行级触发器中引用表数据

在行级触发器中,使用伪记录来表示旧数据:old 和新数据:new

引用示例::new.customer_name, :old.customer_name

3. 行级触发器中的谓词

在一个多条件触发的触发器中,使用谓词可以区分当前触发的操作的类型:触发事件

:old :new Insert 无定义,所有字段都是NULL 该语句完成后插入的值

Update 更新前该行的旧值 更新后该行的值

Delete

删除前该行的值 无定义,所有字段

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 RA W。

[实验内容]

1.给Customer表增加一列Savings,类型为int,来存放每个顾客的存款总额。

ALTER 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.实验中遇到的问题和解决的方法。

相关文档
最新文档