`
234390216
  • 浏览: 10197608 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:461025
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1772150
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395808
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394009
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678368
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529422
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1179009
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:462599
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150293
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66978
社区版块
存档分类
最新评论

Oracle——15触发器

阅读更多


触发器可实现表间数据的一致性和完整性。当一个基表被修改时,相应的触发器会自动执行。对表数据的操作有插入、修改和删除,相应的维护数据的触发器也大致有insert、update和delete三种。

触发器的类型有三种:

(1)DML触发器:在对表进行DML操作的时候触发。

(2)替代触发器:由于在Oracle中不能直接对有两个以上表建立的视图进行DML操作,所以给出了替代触发器,它是Oracle专门为进行视图操作的一种处理方法。

(3)系统触发器:它可以在Oracle数据库系统的事件中进行触发,如数据库的开启和关闭。

触发器中的关键词:

触发器中有两个非常重要的关键词,一个是old,一个是new,old用于修饰操作完成前的值,new用于修饰完成后的值,可以代表一行。此外,只有行级的触发器才能使用这两个关键字。

 

一、利用SQL语句创建触发器

1、利用SQL创建触发器的语法格式:

 

		create [or replace] trigger [schema.]trigger_name
		{before | after | instead of}
		{delete [or insert][or update [of column,...n]]}
		on [schema.]table_name | view_name
		[for each row [when(condition)]]
		sql_statement[,...n]
 

其中,before:触发器在操作前执行;after:触发器在操作后执行;instead of:指定创建替代触发器。

delte、insert、update:指定触发事件,多个事件间用or连接。

of Column:指定在哪些列上执行update触发。

for each row:表示该触发器是行级的,只有行级的触发器才能使用old和new关键字。

示例代码:

 

			create or replace trigger moduleInsertTrigger after insert
			on t_module
			begin
				dbms_output.put_line('The Name is: ' || :new.name);
			end;
 

2、创建触发器的限制

(1)触发器代码大小必须小于32KB

(2)触发器中有效语句可以包括DML语句,但不能包括DDL语句;rollback、commit、savepoint也不能使用。但是,对于系统触发器可以使用create、alter、drop table和alter...compile语句。

(3)long、long raw和lob的限制:

a.不能插入数据到long或long raw

b.来自long或long raw的数据可以转换成字符型,但是不能超过32KB

c.使用long或long raw不能声明变量

d.在long或long raw列中不能使用:new和:parent

e.在lob中的:new变量不能修改

(4)引用包变量的限制:如果update或delete语句检测到当前的update冲突,则Oracle会执行rollback到savepoint上并重新启动更新。

3、触发器触发顺序

(1)执行before语句的触发器

(2)执行before语句的行级触发器

(3)执行DML语句

(4)执行after语句的行级触发器

(5)执行after语句的触发器

4、创建DML触发器

触发器有单独的名字空间,所以触发器名可以与表名和过程名相同,但在同一个schema中的触发器不能重名。

假设现在这样一个表t_module(id,name),然后这里面的数据非常重要,我们希望能够保留它的删除记录,这样我们就可以给该表建立如下这样一个触发器:

 

	create or replace trigger module_delete_trigger after delete
	on t_module for each row
	begin
		insert into t_module_deleted values(:old.id, :old.name, current_timestamp);
	end;
	
 

5、创建替代触发器

由于视图有可能是由多个表进行关联而成,这种情况下,直接通过更新视图来更新基表是不可行的,这个时候我们就可以通过替代触发器来工作了。

示例代码:

 

	/*创建视图*/
		create or replace view t1_t2_view
		as
		select t1.name t1_name, t2.name t2_name, t2.id t2_id from table1 t1 join table2 t2 on t1.id=t2.t1id;
	/*创建对应的更新触发器*/
		create or replace trigger t1_t2_view_trigger instead of update
		on t1_t2_view for each row
		begin
		  update table2 t2 set t2.name = :new.t2_name where id = :new.t2_id; 
		end;
 

6、创建系统触发器

系统触发器是在进行数据库系统事件时进行触发,主要包括DDL语句,其语法格式如下:

 

		create or replace trigger [schema.]trigger_name
		{before | after}
		{DDL_EVENT_LIST | database_event_list}
		on {database | [schema.]SCHEMA}
		[when_clause]
		trigger_body
 

其中,DDL_EVENT_LIST表示一个或多个DDL事件,多个事件可以用or分开;

database_event_list表示一个说多个数据库事件,多个事件中间用or分开;

database表示数据库级触发器;schema表示用户级触发器。

示例代码如下:

 

		create or replace trigger create_trigger
		before create on schema
		begin
		  insert into table10(id, name) values (100, 'HELLO');
		end;
 

二、触发器的修改

和过程、视图一样,Oracle也提供了alter trigger语句,但是该语句只是用于重新编译现有触发器的,需要修改触发器需要使用create or replace trigger...语句。

三、触发器的删除

语法格式:

 

		drop trigger [schema.]trigger_name.
4
0
分享到:
评论

相关推荐

    Oracle应用项目—— 触发器实例.pdf

    Oracle应用项目—— 触发器实例.pdf 学习资料 复习资料 教学资源

    基于Oracle触发器的数据实时同步的实现——在员工医疗保险系统中

    基于Oracle触发器的数据实时同步的实现——在员工医疗保险系统中

    基于Oracle触发器的数据实时同步的实现——在员工医疗保险系统中.pdf

    基于Oracle触发器的数据实时同步的实现——在员工医疗保险系统中.pdf

    数据库原理及应用A实验报告(实验三——存储过程与触发器)

    Oracle database 12.1.0.2.0 PL/SQL Developer 12 三、实验步骤、出现的问题及解决方案 1.建立存储过程 2.调用存储过程 3.掌握触发器的建立和应用 1、建立存储过程完成图书管理系统中的借书功能,并调用该存储过程...

    oracle database 10g 完整参考手册part1

    第4章 规划Oracle应用程序——方法、风险和标准 第Ⅱ部分 SQL和SQL*Plus 第5章 SQL中的基本语法 第6章 基本的SQL*Plus报表及命令 第7章 文本信息的收集与修改 第8章 正则表达式搜索 第9章 数值处理 第10章 日期:...

    21天学通Oracle

    第15章 Oracle中的控制语句(教学视频:16分钟) 282 第16章 SQL查询(教学视频:55分钟) 290 第17章 SQL更新数据(教学视频:34分钟) 319 第四篇 Oracle编程高级应用 第18章 数据库速度优化与数据完整性...

    Oracle数据库应用开发——数据操作与PLSQL程序设计实验报告.docx

    1.实现数据的增、删、改及合并操作 2.实现简单查询及高级查询操作 3.实现存储过程的创建和调用方法 4.实现触发器的创建方法

    oracle database 11g 高清完整中文版part2

     第4章 规划oracle 应用程序——方法、风险和标准 第ⅱ部分 sql 和sql*plus  第5章 sql 中的基本语法  第6章 基本的sql*plus 报表和命令  第7章 文本信息的收集与更改  第8章 正则表达式搜索  第9章 数值处理 ...

    轻松学Oracle数据库

    轻松学编程:轻松学Oracle数据库》共15章,由浅入深、全面系统地介绍了OracleDatabase11g数据库系统的使用方法和基本管理,其主要内容包括:Oracle11g关系数据库,Oracle数据库的体系结构,SQL*Plus,表空间,管理...

    Oracle Database 11g初学者指南--详细书签版

     ·核心概念——oracle database 11g主题呈现在按逻辑组织的章节中  ·主要内容——每章要介绍的具体内容列表  ·实践练习——演示如何应用在每章学到的关键技术  ·学习效果测试——对学习效果的快速自我评估 ...

    oracle实验报告

    Oracle数据库自带的几个触发器(最简单触发器格式)示例如下: -- create or replace trigger MDSYS.sdo_drop_user after drop on DATABASE declare stmt varchar2(200); BEGIN if dictionary_obj_type = 'USER...

    oracle database 11g 完整参考手册中文高清完整版part3

     第4章 规划oracle 应用程序——方法、风险和标准 第ⅱ部分 sql 和sql*plus  第5章 sql 中的基本语法  第6章 基本的sql*plus 报表和命令  第7章 文本信息的收集与更改  第8章 正则表达式搜索  第9章 数值处理 ...

    oracle database 11g完全参考手册 高清完整版part1 共3部分

     第4章 规划oracle 应用程序——方法、风险和标准 第ⅱ部分 sql 和sql*plus  第5章 sql 中的基本语法  第6章 基本的sql*plus 报表和命令  第7章 文本信息的收集与更改  第8章 正则表达式搜索  第9章 数值处理 ...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    核心概念——Oracle Database 11g主题呈现在按逻辑组织的章节中 主要内容——每章要介绍的具体内容列表 实践练习——演示如何应用在每章学到的关键技术 学习效果测试——对学习效果的快速自我评估 注意——与所介绍...

    Oracle 11g 从入门到精通——第六章(视频教程)

    共计4个视频: 1 程序包 2 触发器 3 存储过程 4 函数

    Oracle_Database_11g完全参考手册.part2/3

     构建和调整PL/SQL触发器、函数和程序包  使用Java、JDBC和XMIL开发数据库应用程序  使用Oracle实时应用群集(RAC)优化可用性和可扩展性 内容提要 《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle ...

    Oracle_Database_11g完全参考手册.part3/3

     构建和调整PL/SQL触发器、函数和程序包  使用Java、JDBC和XMIL开发数据库应用程序  使用Oracle实时应用群集(RAC)优化可用性和可扩展性 内容提要 《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle ...

    Oracle 10g 开发与管理

    补充资料——oracle安装时出现的问题 12 第二讲 Oacle数据库体系结构 14 一. 物理存储结构——(数据库载体) 14 1.数据文件(.DBF) 14 2.日志文件 (.Log) 14 1) 日志文件 15 2) 数据库工作模式 15 3.控制文件...

Global site tag (gtag.js) - Google Analytics