DML触发器有三类:1, insert触发器; 2, update触发器; 3, delete触发器;
触发器的组成部分: 触发器的声明,指定触发器定时,事件,表名以类型
触发器的执行,PL/SQL块或对过程的调用
触发器的限制条件,通过where子句实现
类型:
应用程序触发器,前台开发工具提供的;
数据库触发器,定义在数据库内部由某种条件引发,分为: DML触发器 数据库级触发器 替代触发器;
DML触发器组件:
1,触发器定时 2,触发器事件 3,表名 4, 触发器类型 5, When子句 6, 触发器主体
可创建触发器的对象:数据库表,数据库视图,用户模式,数据库实例
创建DML触发器:
Create [or replace] trigger [模式.]触发器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 条件
PL/SQL块
For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;
When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;
Insert触发器的创建:
create or replace trigger tg_insert
before insert on student
begin
dbms_output.put_line('insert trigger is chufa le .....');
end;
/
update表级触发器的例子:
create or replace trigger tg_updatestudent
after update on student
begin
dbms_output.put_line('update trigger is chufale .....');
end;
/
可见,表级触发器在更新了多行的情况下,只触发了一次;
如果在after update on student后加上
For each row的话就成为行级触发器,运行效果:
:new 与: old:必须是针对行级触发器的,也就是说要使用这两个变量的触发器一定有for each row
这两个变量是系统自动提供的数组变量,:new用来记录新插入的值,old用来记录被删除的值;
使用insert的时候只有:new里有值;
使用delete的时候只有:old里有值;
使用update的时候:new和:old里都有值;
可以这样使用: dbms_output.put_line('insert trigger is chufa
dbms_output.put_line('new id is : '||:new.stui
dbms_output.put_line('new name is : '||:new.st
dbms_output.put_line('new se is : '||:new.se);
可以这样从数据字典中查看一个表上有哪几个触发器:
带有:old变量的行级delete触发器:
create or replace trigger tg_deletestudent
before delete on student
for each row
begin
dbms_output.put_line('old is: '||:old.stuid);
dbms_output.put_line('old name: '||:old.stuname);
end;
/
运行效果:
When的使用:如果在begin也就是说触发器的PL/SQL主体块执行前加上when(old.se=’f’)的话,DML操作照做不误,但是只会在删除
Se=’f’的那行的时候才会执行触发器的主体动作,执行效果:
混合类型触发器:
Inserting,deleting,updating三个谓词可以分别指示当前操作到底是哪个;
create or replace trigger hunhetrigger
before insert or update or delete on student
for each row
begin
if inserting then
dbms_output.put_line('insert le.........');
end if;
if deleting then
dbms_output.put_line('delete le .......');
end if;
end;
/
注意,既然触发器内部的主体PL/SQL是语句,那么它同样也可以是插入删除操作而不一定只是dbms_output打印一些信息;
这正是日志表的原理:在用户执行了DML语句的时候触发主体为插入日志表以记录操作轨迹的触发器;
注意:触发器会使得原来的SQL语句速度变慢;
替代触发器:
创建在视图上的触发器,就是替代触发器,只能是行级触发器;
为什么要用替代触发器?
假如你有一个视图是基于多个表的字段连接查询得到的;现在如果你想直接对着这个视图insert;那你一定在想,我对视图的插入操作
怎么来反应到组成这个视图的各个表中呢?事实上,除了定义一个触发器来绑定在对视图上的插入动作上外,你没有别的办法通过系统的报错而直接向视图中插入数据;这就是我们用替代触发器的原因;替换的意思实际上是触发器的主体部分把对视图的插入操作转换成详细的对各个表的插入;
变异表:变异表就是当前SQL语句正在修改的表,所以在一个变异表上绑定的触发器不可以使用cout()函数,原因很简单:SQL语句刚刚修改了表,你怎么统计??
约束表:
维护:
Alter trigger …..disenable; 使得触发器不可用;
Alter trigger ……enable; 开启触发器;
Oracle的内置程序包
扩展数据库的功能;
为PL/SQL提供对SQL功能的访问;
创建目录:
create or replace directory filedir as 'f:\oracle'
/只是向Oralce注册了目录,实际上并不会真的建立目录在磁盘上;Oracle无权管理和锁定操作系统的文件系统;
分享到:
相关推荐
### Oracle从入门到精通 #### 一、Oracle数据库概述 Oracle是一种关系型数据库管理系统(RDBMS),由Oracle公司开发并维护。它具有高度的数据安全性和稳定性,在企业级应用中非常受欢迎。Oracle支持多种操作系统,...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
### Oracle实用入门命令集 #### 一、Oracle基础命令概览 在Oracle数据库管理与操作过程中,掌握一些基本命令对于日常运维工作至关重要。本文将详细介绍这些常用命令,并结合实际应用场景进行解析。 #### 二、连接...
Oracle还提供了视图(View)、存储过程(Stored Procedure)、触发器(Trigger)等高级特性,它们允许用户创建自定义的查询结果集、封装复杂的业务逻辑以及实现特定的数据操作自动化。学习这些特性,可以提高代码的...
Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,由美国甲骨文公司...以上是Oracle数据库入门的基本内容,通过学习这些知识,你可以对Oracle有一个全面的认识,并为后续深入学习和实际应用打下坚实基础。
Oracle基础入门是数据库管理和开发初学者的指南,涵盖了Oracle数据库的基本操作和PL/SQL编程。以下是对这些主题的详细说明: 一、相关知识 1.1 关系型数据库(目前主流) 关系型数据库是最常见的数据库类型,以...
根据提供的文件信息“oracle入门到精通”,我们可以详细探讨Oracle数据库的相关知识点,包括Oracle数据库的基础概念、安装配置、基本操作、SQL语言使用、高级特性以及性能优化等方面。 ### Oracle数据库基础 #### ...
- 创建触发器:CREATE TRIGGER语句的使用方法。 - 触发器事件:INSERT、UPDATE、DELETE等触发事件的处理。 5. **序列**: - 序列的概念:了解序列的基本用途。 - 创建序列:CREATE SEQUENCE语句的使用方法。 -...
### Oracle PL/SQL 入门之案例实践 #### 案例背景 本案例实践旨在通过实际操作加深学习者对于Oracle PL/SQL的理解与运用能力。案例围绕一家公司的员工资料和部门信息展开,通过一系列具体任务,综合考察了基本SQL...
以下是对Oracle入门知识的详细总结: 1. **创建用户** 在Oracle中,我们可以通过`CREATE USER`语句来创建新的数据库用户。例如: ``` CREATE USER user_name IDENTIFIED BY "password" DEFAULT TABLESPACE ...
### Oracle入门基础教程知识点概述 #### 一、数据库基础 - **定义与概念**:介绍数据库的基本定义,包括什么是数据库、数据库管理系统(DBMS)、数据模型等。 - **数据库分类**:按照不同的标准对数据库进行分类,...
Oracle数据库系统是全球广泛使用的大型关系型数据库之一,尤其在企业级应用中占据重要地位。本文将从创建用户、权限管理、创建表、创建视图、创建存储过程和创建触发器等方面,对Oracle数据库的基础操作进行概述。 ...
【Oracle PL/SQL入门】是针对初学者的基础教程,涵盖了PL/SQL编程的关键概念。PL/SQL是Oracle数据库中的一种过程化编程语言,它结合了SQL的查询能力与编程语言的功能,使得数据库管理与应用程序开发更为高效。 **一...
- **触发器(Trigger)**:在特定事件发生时自动执行的一段PL/SQL代码。 **2.5 PL/SQL编程** - **概述**:PL/SQL是一种专为Oracle数据库设计的过程化语言,结合了SQL语言的功能和传统编程语言的控制结构。 - **优点*...
CREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN INSERT INTO another_table(column) VALUES(new_value); END; ``` 这个触发器在向`table_name`插入新行时,会在`...
4. **删除**:`DROP TRIGGER trigger_name;`。 **九、包** 1. **包头**:定义包的接口,包括公共的变量、常量、过程和函数声明。 2. **包体**:实现包头中声明的元素的具体逻辑。 3. **实例**:创建和使用包的过程...
这本书"Oracle 11g SQL PL SQL 从入门到精通 全本"应该是涵盖了这两个领域的全面知识,帮助初学者到进阶者逐步掌握在Oracle 11g环境中使用SQL和PL/SQL进行数据操作与应用开发。 首先,对于SQL,你需要了解以下几个...
在Oracle Database 10g中,PL/SQL还可以与其他Oracle特性结合,比如触发器(Trigger)、包(Package)和数据库链接(Database Link)。触发器是在特定数据库事件发生时自动执行的PL/SQL代码,而包是封装相关过程和...
本笔记是韩顺平Oracle数据库教程的全部笔记,从头到尾,感觉对于Oracle的入门和复习很有帮助,希望能够帮助那些想要学习Oracle的朋友或者复习Oracle知识的朋友。 知识点: 1. Oracle基本语法: SQL语句是Oracle...
本文将深入探讨Oracle和PL/SQL编程的相关知识点,帮助你从入门到精通。 Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它提供了强大的数据存储、管理和处理能力。Oracle的核心功能包括数据定义(DDL)、...