触发器 1、触发器相当于触发按钮发生的事件,它是在事件发生时隐式地运行的,并且触发器不能接收参数。 2、触发的事件可以是对数据库表的DML操作或某个视图操作,也可以是系统事件,如数据库的启动和关闭及一些DDL操作。 3、触发器分三种类型: DML触发器(邮表上执行的INSERT/UPDATE/DELETE操作触发);INSTEAD OF替代触发器(用于视图的操作);系统触发器(用于系统事件触发)。 4、触发器的作用:安全性方面,确定用户的操作是否可继续执行;产生对数据值修改的审计,将修改的信息记录下来,产生数据改动记录;提供更灵活的完整性校验规则,能够根据 更复杂的规则校验数据;提供表数据的同步复制,使多个表的数据达到同步;事件日志记录,记录数据库的重要操作信息。 5、创建语句级DML触发器语法"create [or replace] trigger 触发器名 触发时机 事件 on 表名 when 条件 触发器执行体",如: --创建DML触发器,阻止在非工作时间对EMP表插入记录 SQL>CREATE OR REPLACE TRIGGER secure_emp BEFORE INSERT ON emp /*触发时机可以是AFTER或BEFORE*/ BEGIN IF (TO_CHAR(SYSDATE,'DY') IN ('星期六','星期日')) OR (TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '08:00' AND '18:00') THEN RAISE_APPLICATION_ERROR(-20500,'你只能在工作时间对EMP表执行插入操作'); /*将应用程序的错误从服务器端传递到客户端应用程序*/ END IF; END; 用户如果在非工作时间给EMP表增加记录,触发器会自动触发并报错。 6、行级触发器:增加了for each row子句,表示每次对表中的每行操作时都会触发这个触发器。如: --创建行级触发器,当降低薪水时引发异常 SQL>CREATE OR REPLACE TRIGGER check_salary BEFORE UPDATE OF sal ON emp /*触发时机可以是AFTER或BEFORE*/ FOR EACH ROW WHEN (NEW.sal<OLD.sal) BEGIN RAISE_APPLICATION_ERROR(-20501,'不允许降低薪水'); /*-20501为错误编号,自己定义的,取值范围从-20000到-20999之间,为避免与oracle冲突*/ END; 7、创建替代触发器:当需要通过视图影响它所对应的基表时,可以通过替代触发器来实现,如: --创建替代触发器,将对视图的删除操作,转换为对emp表的删除操作 SQL>CREATE OR REPLACE TRIGGER emp_view_delete INSTEAD OF delete ON emp_view /*emp_view为视图名*/ FOR EACH ROW BEGIN DELETE FROM empWHERE deptno= :old.deptno; END; 8、系统触发器分为两种:用户触发事件(DDL命令;登录或者退出数据库连接)和系统触发事件(启动、关闭数据库;特殊错误发生)。如: --创建系统事件触发器,记录用户的登录登出 SQL>conn sys/oracle as sysdba /*连接登录数据库*/ SQL>create table event(eventuser varchar2(20), action varchar2(20), logtime date default sysdate); /*默认为系统时间*/ --创建数据表event,记录用户的登录 SQL>CREATE OR REPLACE TRIGGER trig_logon AFTER logon ON DATABASE BEGIN --将事件属性插入到事件日志表中 INSERT INTO sys.event(eventuser,action) VALUES(USER,'log on'); END; --创建触发器,记录用户的登出 SQL>CREATE OR REPLACE TRIGGER trig_logoff AFTER logoff ON DATABASE BEGIN --将事件属性插入到事件日志表中 INSERT INTO sys.event(eventuser,action) VALUES(USER,'log off'); END; 9、在PL/SQL触发器中调用存储过程的访求是通过CALL命令,如: SQL>CREATE OR REPLACE TRIGGER trig_ddl AFTER CREATE OR ALTER OR DROP ON DATABASE CALL 过程名 注意此种方式创建触发器不需BEGIN和END,程序末尾出无需写分号";"。 10、在数据字典中查看触发器"select object_name from user_objects where object_type='TRIGGER'" 11、触发器默认是启用状态,禁用触发器"alter trigger 触发器名 disable",禁用某表上所有的触发器"alter table 表名 disable all triggers"。 12、删除触发器"drop trigger 触发器名"。 13、触发器的执行顺序,表上所有触发事件的触发顺序如下: (1)执行所有的before statement触发器。 (2)根据操作的行循环地执行:所有的before row 触发器;所有after row触发器。 (3)执行DML语句,进行完整性约束条件检测。 (4)执行所有的after statement触发器。 作用完善多表之间的完整性约束校验,当对主表操作时,如果主表被子表引用,则先对子表操作,这样就不会违反完整性约束了,如: --建立触发器之前执行修改操作,此时会报错,违反完整性约束条件 SQL>UPDATE dept SET deptno=70 WHERE deptno=20; --建立触发器 SQL>CREATE OR REPLACE TRIGGER trig_update AFTER UPDATE OF deptno ON dept /**/ FOR EACH ROW BEGIN --先将emp表中所有属于部门20的员工更改到新的部门70下,再修改主表的部门编号 UPDATE emp SET emp.deptno= :NEW.deptno WHERE emp.deptno= :OLD.deptno; END; --建立触发器之后执行修改操作,成功 SQL>UPDATE dept SET deptno=70 WHERE deptno=20; /*把部门编号为20的修改成70*/
相关推荐
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...
Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...
8. **触发器**:触发器是在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/SQL代码,常用于实现业务规则和约束。 9. **包(Package)**:包是组织和封装相关PL/SQL对象(如过程、函数、变量和类型...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...
PL/SQL Developer是一款由Allround Automations公司开发的专业Oracle数据库开发工具,专为编写、调试、测试和管理PL/SQL代码而设计。标题中的“pl/sql developer11.0”指的是该软件的第11个主要版本。在本文中,我们...
### Oracle 9i PL/SQL程序设计笔记精要 #### PL/SQL基础知识概览 **标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...
本文将深入探讨PL/SQL中的三个关键概念:函数、包和触发器,以及它们在Oracle数据库系统中的应用。 ### 1. 函数(Functions) 函数是PL/SQL中可重用的代码单元,它们接收输入参数,执行计算或操作,并返回一个结果...
PL/SQL Developer是一款高效、便捷的Oracle数据库管理工具,尤其适合DBA和开发人员使用。免安装的绿色版PL/SQL Developer使得用户无需经历复杂的安装过程,只需解压即可使用,大大简化了软件部署,方便在不同的...
PL/SQL是Oracle数据库系统中的一个核心组件,全称为“Procedural Language/Structured Query Language”,它是SQL的扩展,增加了编程元素,使得开发者能够编写存储过程、函数、触发器等数据库应用程序。这篇博客主要...
PL/SQL Developer是一款由Allround Automations公司开发的专门用于Oracle数据库管理的集成开发环境(IDE)。这款软件为Oracle数据库管理员、开发人员和测试人员提供了便捷的SQL和PL/SQL编写、调试和执行功能。而“pl...
10. **触发器(TRIGGER)**:触发器是在特定数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行的PL/SQL代码,用于实现业务规则和约束。 通过“Oracle PLSQL by Example, Third Edition”这样的书籍,你可以...
### PL/SQL编程基础知识 #### 一、PL/SQL简介 PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库...
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...
《Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发》是一本深入探讨Oracle数据库中的PL/SQL编程的专业书籍。PL/SQL是Oracle数据库特有的编程语言,它结合了SQL的查询能力与过程式编程语言的功能,使得数据库...
7. **触发器**:在特定的数据库事件(如INSERT,UPDATE,DELETE)发生时自动执行的PL/SQL代码,用于实现业务规则和数据完整性。 8. **存储过程和函数**:在数据库服务器端执行的PL/SQL代码,可以提高性能,减少网络...
3. PL/SQL程序单元包括过程(Procedures)、函数(Functions)、包(Packages)、触发器(Triggers)等。文档中特别提到了“创建过程”的过程和方法,例如使用SQL的CREATE OR REPLACE语句。 4. PL/SQL结构命名惯例...
PL/SQL doc 文件 PL/SQL 是 ORACLE 对标准数据库语言的扩展,它被整合到 ORACLE 服务器和其他工具中,近几年中更多的开发人员和 DBA 开始使用 PL/SQL。本文将讲述 PL/SQL 基础语法、结构和组件、以及如何设计并执行...