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

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数据库中的触发器是数据库对象的一种,用于在特定的数据操作(如INSERT、UPDATE、DELETE)发生时自动执行预定义的PL/SQL代码。触发器能够帮助数据库管理员和开发者实现复杂的数据完整性约束,以及在数据库中...

    深入浅出Oracle——DBA 入门、 进阶与诊断案例

    《深入浅出Oracle——DBA入门、进阶与诊断案例》是盖国强先生的一本经典著作,专门针对Oracle数据库管理进行深入讲解。这本书对于想要成为Oracle DBA(数据库管理员)或者希望提升自己在Oracle数据库管理技能的人来...

    Oracle基于系统级触发器的审计功能

    自Oracle 8i版本开始,Oracle DBMS引入了一种特殊类型的触发器——系统级触发器,它能够针对一系列非DML(数据操纵语言)事件执行特定的操作。本文将详细介绍Oracle系统级触发器的审计功能及其应用场景。 #### 系统...

    Oracle触发器与存储过程高级编程(chm)

    1. **类型**:Oracle支持三种类型的触发器——行级触发器(处理单个行)、语句级触发器(处理整个SQL语句)和复合触发器(结合了行级和语句级触发器的特性)。 2. **创建触发器**:使用CREATE TRIGGER语句定义...

    Oracle触发器与存储过程高级编程

    2. **触发器的时机**:触发器可以在事件发生前(BEFORE)或后(AFTER)执行,此外,还有一种特殊的触发器类型——INSTEAD OF触发器,它在特定条件下替代触发事件的执行。 3. **触发器的使用场景**:触发器常用于...

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

    "基于Oracle触发器的数据实时同步的实现——在员工医疗保险系统中" 本文主要讨论了基于Oracle触发器的数据实时同步的实现,在员工医疗保险系统中演示了数据同步的重要性和实现方法。随着全球化的发展,企业对数据...

    Oracle入门——oracle的基础入门知识,适合初学者。

    这有助于他们建立起对数据库管理系统的初步认识,为进一步学习更高级的Oracle功能,如存储过程、触发器、索引优化、备份恢复等打下基础。通过逐步深入学习,初学者可以掌握如何创建和管理用户、配置数据库实例、确保...

    oracle触发器1.ppt

    1. DML触发器:这是最常见的一类触发器,它们在数据操纵语言(DML)操作——插入(INSERT)、删除(DELETE)或更新(UPDATE)——发生时被激活。DML触发器又可以细分为行级触发器和语句级触发器。行级触发器在DML...

    oracle触发器

    根据提供的代码片段,我们可以深入分析一个具体的触发器实例——`Trg_ReimFact`触发器。这个触发器主要针对`BP_Order`表,在其更新操作前进行处理。 ##### 2.1 触发器定义 ```sql CREATE OR REPLACE TRIGGER Trg_...

    Oracle缓存连接——Timesten体系结构 .docx

    Oracle缓存连接——Timesten体系结构是一种优化数据库性能的技术,它通过在内存中缓存Oracle数据库的部分或全部数据来加速查询和事务处理。Timesten是Oracle公司提供的一款高性能的内存数据库,专为实时应用设计,能...

    oracle笔记

    《Oracle数据库知识详解——以触发器为例》 Oracle数据库,作为全球广泛使用的数据库管理系统之一,其强大而深入的功能深受IT专业人员的青睐。在Oracle中,触发器是一种重要的数据库对象,它能够在特定的数据库操作...

    基于Oracle触发器的后门隐藏技术研究.pdf

    【Oracle触发器后门隐藏技术】是网络安全领域中一种利用关系型数据库——Oracle数据库特性进行后门植入和隐藏的方法。这种技术尤其在云计算环境中,由于Oracle数据库的重要地位,成为研究的重点。后门,通常被称为...

    网吧计费系统————Oracle数据库

    【网吧计费系统——Oracle数据库】是一个针对网络咖啡厅(网吧)收费管理的软件系统,其核心是利用Oracle数据库来存储、管理和处理各种营业数据。Oracle数据库是全球领先的数据库管理系统,以其高性能、高可用性和...

    oracle 数据库系统——管理与应用

    PL/SQL,Oracle的面向过程的编程语言,允许开发存储过程、函数和触发器,增强数据库的功能。同时,Oracle提供ODBC和JDBC接口,使得其他编程语言可以与数据库交互,构建复杂的业务系统。 在Oracle的高级特性中,...

    Oracle学习笔记——day01

    在深入学习Oracle数据库时,还会接触到更多高级概念,如索引、视图、存储过程、触发器、游标等,这些都是提升数据库性能和管理效率的关键。随着学习的深入,你将更熟练地运用这些工具和技巧来管理和操作数据库,为...

    Oracle 实用教材———web版

    "Oracle 实用教材———web版"显然是一本专为初学者设计的教程,旨在通过Web方式进行Oracle 9i数据库的学习和实践。Oracle 9i是Oracle公司推出的第九个主要版本,它在功能上进行了许多优化和增强,尤其是在互联网...

    触发器样例oracle

    本文将详细介绍Oracle数据库中的触发器机制,并通过一个具体的示例——`del_deptId`触发器,来讲解触发器的创建、工作原理以及在实际业务场景中的应用。触发器是数据库管理系统中的一种特殊存储过程,它可以在特定的...

Global site tag (gtag.js) - Google Analytics