触发器 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*/
相关推荐
12oracle的PL/SQL编程-函数.包.触发器 PPT 12oracle的PL/SQL编程-函数.包.触发器 PPT
通过使用过程、函数、触发器和包,建立模块化的PL/SQL应用。 内容推荐 《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、...
PL/SQL 程序设计 本章主要重点: PL/SQL概述 PL/SQL块结构 PL/SQL流程 运算符和表达式 游标 异常处理 数据库存储过程和函数 包 触发器
PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger...
<br>对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑...
对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、浏览...
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...
<br>对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑...
PL/SQL简介(第1~2章) PL/SQL中的SQL语句(第3章) 控制结构(第4~7章) 异常处理(第8~10章) 游标(第11~12章) 触发器(第13~14章) 复合数据类型(第15~16章) 动态SQL(第17章) 批量SQL(第18章) 子程序和包...
oracle pl/sql 存储过程和函数与触发器
PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。除此之外,可以在ORACLE数据库的某些...
PL/SQL从入门到精通学习帮助手册,PL/SQL简介,PL/SQL操作,存储过程,触发器等
pl/sql编写的院校招生系统(通过包、存储过程、触发器、视图等完成的),可供学习oracle数据库pl/sql编程使用
ORACLE PL/SQL 存储过程 触发器 ORACLE PL/SQL 存储过程 触发器 子程序 游标
通过使用过程、函数、触发器和包,建立模块化的PL/SQL应用。 内容推荐 《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、...
PL/SQL Developer超强大的oracle...PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,可以大大缩短程序员的开发周期。
本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法...
共分为7部分(7个pdf文档...第一部分:PL/SQL介绍及开发环境 1.PL/SQL介绍 2.PL/SQL开发和运行环境 3.跟踪和调试 第二部分:非对象功能 4.创建子程序和包 5.使用子程序和包 6.数据库触发器 7.数据库作业和文件输入输出
包括过程,函数,触发器和包以及pl/sql基本程序结构的讲解