ORACLE 第九讲 触发器.

Slides:



Advertisements
Similar presentations
Oracle. 数据操纵语言  数据操纵语言用于检索、插入和修改数据  数据操纵语言是最常见的 SQL 命令  数据操纵语言命令包括:  SELECT  INSERT  UPDATE  DELETE.
Advertisements

第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
1 第 5 章 SQL 语句基础 在 Oracle 数据库中,为了方便管理用户所创建的 数据库对象,引入了模式的概念,这样用户所创建的 数据库对象就都属于该用户模式。对于一般的用户而 言,数据库中的数据是以表、视图行等方式存储的( 表和视图就是最基本的用户模式对象),用户只需要 根据自己的需求查询数据库,然后由数据库根据请求.
2010 年 6 月课件制作人:王亚楠 1 模块 2 项目开发概论 教学课件 年 6 月课件制作人:王亚楠 2 目录 目标 了解:数据库技术的基本概念与结构 理解:数据模型的分类与结构组成 掌握:关系数据库及 SQL 的基本理论 知识 掌握:数据库设计的方法与步骤 内容 2.1 数据库技术基础.
MySQL 基础技能与原理 —— 基础技能 MySQL DBA Team 彭立勋( )
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
教学网站: 数据库及应用 授课教师:岳静 Tel: 教学网站:
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
让我们一起走进物流 大一的时光即将结束,马上就要开专业课了,作为物流管理系的学生,同学们是不是又对物流有了进一步的了解呢?今天让我们通过活动一起走进物流吧! 制作人:丁方媛、王志丹.
第2讲 Transact-SQL语言.
  中国技术交易信息服务平台 中国技术市场管理促进中心.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
第四章 数据库对象.
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第14章 預存程序 14-1 預存程序的基礎 14-2 建立與執行預存程序 14-3 預存程序的參數傳遞 14-4 預存程序的傳回值
資料庫 (Database) SQL Server 2008實作
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
数据库原理及设计 --作业.
文科计算机小公共课规划教材 Access 程序设计.
TCL多媒体2013校园招聘春季补招 TCL 多媒体科技控股有限公司(简称TCL 多媒体)是香港联交所上市公司(股票代码:01070),其母公司为 TCL 集团。TCL 多媒体是全球领先的消费电子产品生产商,主要从事电视机产品的研发、制造和销售,其中彩电是公司的核心产品。 TCL 多媒体总部设在中国深圳,其研发、生产的分支机构遍布世界各地。制造基地分别位于广东惠州、江苏无锡、内蒙呼和浩特、四川成都、墨西哥、波兰和越南胡志明市等,为全球客户提供高品质的产品。
Chap 13 視界與資料庫程式設計.
电子商务师 第二部分 电子商务的技术基础—计算机.
中国家电行业 专业化与多元化道路         第9组               黄超               张黎江               鲍天钰               孙蓉               汤娜                 制作  黄超         
企业的创新 2011级会计学三班 姓名: 吴思思 学号:
新世代的就業競爭力 報告人:朴子就業服務站劉美玲站長 日 期:96.10.
数据库应用与程序设计.
主机DB2数据库应用与编程 任课老师:王湖南 四川大学计算机(软件)学院.
第五讲 利用视图进行查询优化.
關聯式資料庫.
Oracle数据库入门.
数据库技术 第十章 数据库完整性 中国科学技术大学网络学院 阚卫华.
第四章:触发器   触发器类似于过程、函数,因为它们都是拥有说明部分、语句执行部分和异常处理部分的有名的PL/SQL块。与包类似,触发器必须存储在数据库中,并且不能被块进行本地化说明。但是,对于过程而言,可以从另一个块中通过过程调用显式地执行一个过程,同时在调用时可以传递参数。对于触发器而言,当触发事件发生时就会显式地执行该触发器,并且触发器不接受参数。
第六章 學習SQL語言.
課程名稱:資料庫系統 授課老師:李春雄 博士
数据库技术 第三章 关系数据库标准语言SQL 中国科学技术大学网络学院 阚卫华.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
第 11 章 建立檢視表.
第 7 章 建立資料表與 資料庫圖表.
第16讲 数据库系统的增强安全性 第7章:数据库系统的增强安全性.
Transact-SQL 語言設計教學.
第8章 数据库的安全和完整性约束 数据库的破坏一般来自: 1.系统故障; 2.并发所引起的数据不一致; 3.人为的破坏;
第 16 章 觸發程序.
題庫解析:MTA資料庫檢定 授課老師:李春雄 博士
第7章 ADO.NET操作SQL Server数据库
建立/修改/刪除資料表 建立資料表 使用Enterprise Manager工具
5 数据库管理与保护 数据库运行的最小逻辑工作单位是事务,所有对数据库的操作,都以事务作为一个整体来执行或撤销。
第三章:包   包(package)是一个可以将相关对象存储在一起的PL/SQL结构。包包含了两个分离的部件------包说明(specification)和包主体(body)。每个部件都单独被存储在数据字典中。包只能存储在数据库中,不能是本地的。除了可以将相关对象作为一组存在一起以外,包也是十分有用的,因为它们在依赖性方面的限制是比较小的。也有许多性能上的优点。
SQL SERVER 一些经典语句 1.
实验4:PL-SQL编程 1.实验目的 2.实验原理 PL/SQL是一种过程化语言,属于第三代语言,本实验在与熟悉使用PL/SQL编程.
第四讲 数据库对象(视图、序列、同义词、索引)
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
数据库技术.
数据库应用技术 SQL Server 2005.
数据库技术与应用.
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
CS, ZJU 4/18/2019 Chapter 7 数据库.
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
SQL查询语句 蔡海洋.
OceanBase 0.4:从API到SQL 日照
第三章 SQL Server数据管理.
Oracle Database 10g基础教程 清华大学出版社
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
1.4数据库管理系统 数据库管理系统是数据库系统的核心,是为数据库的建立,维护,使用而建立的系统软件,建立在操作系统基础之上,位于操作系统与用户之间的数据管理软件,负责对数据库进行统一管理与控制.
Principle and Technology of Database
第4章 数据查询.
Presentation transcript:

ORACLE 第九讲 触发器

本章目标 熟练掌握行级触发器的创建和使用 熟练掌握语句级触发器的创建和使用 熟练掌握替代触发器的创建和使用

触发器 什么是触发器 触发器是当特定事件出现时自动执行的代码块。 触发器与过程的区别在于:过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。Oracle会在事件请求发生时,执行适当的触发器。

触发器 创建触发器 Create or replace trigger <触发器名> before | after | instead of --指定是在完成操作前还是操作后触发触发器 Insert [or delete] [or update] of <列名> on <表名|视图名> [ REFERENCING [ NEW AS new_row_name ] [ OLD AS old_row_name ] ] –给new或者old定义一个别名,在下面的程序中用别名代替new或者old使用 [for each row] --指定每行触发一次,默认情况下,数据库触发器每个表触发一次 [When (<条件>)] declare ------ Begin -------- exception End;

触发器 举例:在 SCOTT模式的EMP表上创建触发器。 create or replace trigger c_emp_deptno before insert or update of deptno on emp for each row when (new.deptno<>40) begin :new.comm:=0; end;

触发器 触发器的组成 触发器语句 触发器条件 触发器操作

触发器 触发器的组成 触发器语句 触发器语句是那些可以导致触发器的事件,即在表和视图上实行的INSERT、DELETE、UPDATE之类的DML语句,在模式对象上执行的DDL语句或数据库事件。 before insert or update of deptno on emp for each row 这就是说,触发器会在这些事件之前隐式执行;当对EMP表执行INSERT语句或对EMP表的deptno列进行UPDATE 时。而且触发器将在受到影响的每一行上执行一次。但是触发器是否真正执行还要检查触发器限制条件,只有满足限制条件才会执行。

触发器 触发器的组成 触发器条件 触发器限制条件包含一个布尔表达式,该值必须为“真”才能激活触发器。如果该值为“假”或“未知”,将不运行出发操作。 when (new.deptno<>40) 这就是说,如果列deptno的新值不等于40,触发器就会执行。

触发器 触发器的组成 触发器操作 触发器操作是触发器的主体,包含一些SQL语句和代码,这些代码在执行触发器语句且触发器限制条件的值为“真”时运行。行级触发器允许出发操作中的语句访问行的列值。 begin :new.comm:=0; end; 这段代码将列comm新值设为0。

触发器 举例:测试创建的触发器是否有效 insert into values (8000,'Philip','MANAGER',null,'31-12月-2002',6000,500,30); insert into values (8001,'Tom','MANAGER',null,'31-12月-2002',6000,500,40); commit; 上述语句在EMP表中插入了两条记录,并为每行记录指定了 COMM列的值。用户在表中插入了值,这将激活前面创建的触发器。

触发器 触发器的类型 行级触发器 行级触发器对DML语句影响的每个行执行一次。例如, UPDATE语句影响多行,就会对每行都激活一次行触发器。行级触发器是触发器中最常用的一种,通常用于数据库审计和实现复杂的业务逻辑。可以在CREATE TRIGGER命令中指定FOR EACH ROW子句创建行级触发器。 由于触发器是事件驱动的,因此可以设置触发器在这些事件之前或者之后执行,即在执行DML语句之前或之后执行。在触发器中,可以引用DML语句中涉及的旧值或新值。“旧”是指在DML语句之前存在的数据。UPDATE和DELETE通常引用旧值。“新”是指由DML语句创建的数据值(如插入记录中的列)。 如果需要通过触发器在插入行中设置一个列值,就应该使用BEFORE INSERT触发器访问“新”值。使用AFTER INSERT触发器不允许设置插入值,因为该行已经插入表中。 在审计应用程序中经常使用AFTER行级触发器,直到行被修改才会触发它们。行的成功修改表明此行已经通过该表定义的完整性约束。 行级触发器的执行谓词: Insert Delete update

触发器 触发器的类型 行级触发器 举例:创建行级触发器,跟踪触发事件前后表中值的变化 举例:利用触发器和序列实现自增序列. 举例:当把某一部门从dept表删除后,就删除emp表中的该部门的所有信息。 举例:库存-出货

触发器 触发器的类型 表级触发器(语句级触发器) 表级触发器对每个DML语句执行一次。例如,如果一条INSERT语句在表中插入200行,那么这个表上的INSERT表级触发器只执行一次。表级触发器不常用于数据相关的活动,通常用于强制实施在表上执行操作的额外安全措施。表级触发器是CREATE TRIGGER命令创建的触发器的默认类型。 执行谓词: Inserting Deleting Updating 举例:创建一个表级触发器,跟踪DML操作(一次删除或修改一条和多条)

触发器 触发器的类型 表Instead of触发器(替代触发器) 使用INSTEAD OF触发器的限制: 创建语法: INSTEAD OF触发器是在视图上而不是在表上定义的触发器,它是用来替换所使用实际语句的触发器。这样的触发器可以用于克服Oracle在任何视图上设置的限制,允许用户修改不能直接使用DML语句修改的视图。 使用INSTEAD OF触发器的限制: 它们只能在行级使用,而不能在语句级使用。 它们只能应用于视图,而不能应用于表。 如果有需要同时向两个表中插入值的情况,可以通过INSTEAD OF触发器来实现。 创建语法: CREATE TRIGGER <触发器名> INSTEAD OF INSERT|UPDATE|DELETE ON 视图名 BEGIN …… END; 举例:创建一个替代触发器.student,subject,score

触发器 创建触发器的限制 主体中 可以包括“DML SQL”语句,但“SELECT”语句必须为“SELECT INTO”语句或必须在游标声名中; 触发器的主体中不允许有DDL声名; 不允许有事务控制语句(COMMIT、ROLLBACK、SAVEPIONT); 如果所存储的子程序被触发器调用,则它不能包括TCL.

触发器 触发器的启用和禁用 可以启用也可以禁用触发器。默认情况下,所有触发器在首次创建时就是启用的。 ALTER TRIGGER <触发器名> DISABLE; ALTER TRIGGER <表名> DISABLE ALL TRIGGERS; ALTER TRIGGER <触发器名> ENABLE; ALTER TRIGGER <表名> ENABLE ALL TRIGGERS;

触发器 删除触发器 语法: DROP TRIGGER <触发器名>;