理解与实践:Oracle触发器与定时作业实验详解

版权申诉
0 下载量 81 浏览量 更新于2024-07-01 收藏 897KB PDF 举报
实验6触发器与作业综述旨在深入理解数据库管理系统中的关键概念——触发器,以及如何在实际应用中设计和操作它们。触发器是PL/SQL(Procedural Language/Structured Query Language)的一种特殊类型,它们在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行预先编写的SQL语句,从而实现数据的自动校验、业务逻辑的强化或者数据一致性维护。 实验的主要目标包括: 1. **触发器定义与理解**:实验者需要掌握触发器的概念,即一种数据库对象,它在满足预设条件时自动执行,类似于小型的存储过程。触发器通常用于处理表级别的事务,确保数据的完整性或执行特定的操作。 2. **触发器的创建与管理**:实验涵盖了触发器的创建语法,包括CREATE OR REPLACE TRIGGER语句,其中包含了触发器名称、触发时间(例如BEFORE或AFTER事件)、触发表以及PL/SQL代码段。此外,还介绍了如何通过DROP TRIGGER语句来删除不再需要的触发器,以防止它们对后续实验造成干扰。 3. **触发器基础示例**:通过实例演示,学生将学习如何编写基本的触发器,如一个在工作时间限制外禁止插入新记录的示例。这个例子使用了TO_CHAR函数获取当前日期和时间,检查是否在工作日的工作时间内,如果不符合则抛出错误。 4. **触发器测试**:实验者需要编写和执行SQL插入语句,观察触发器如何在操作前后执行,以及如何根据特定的时间条件(如周末)调整触发器的行为。 5. **实际操作与问题解决**:实验强调了在实际操作中可能遇到的问题,比如需要处理前面实验遗留的触发器,提示学生及时清理以避免潜在冲突。 通过这次实验,学生将不仅了解触发器的工作原理,还会提升他们在Oracle数据库环境下编程和调试触发器的能力,这对于网络工程专业来说是一项重要的技能。在完成实验后,他们应该能够设计和部署触发器以满足特定的业务需求,并确保数据库操作的高效性和安全性。
2023-03-10 上传
实验五 触发器实验报告 [实验目的] 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 引用示例::new.customer_name, :old.customer_name 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。 [实验内容] 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. 实验中遇到的问题和解决的方法。 ----------------------- "触发事件 ":old ":new " "Insert "无定义,所有字段都是N"该语句完成后插入的值 " " "ULL " " "Update "更新前该行的旧值 "更新后该行的值 " "Delete "删除前该行的值 "无定义,所有字段都是N" " " "ULL "