`
robinsoncrusoe
  • 浏览: 745681 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle触发器语法及实例

阅读更多
一 Oracle触发器语法

触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。

功能:

1、 允许/限制对表的修改

2、 自动生成派生列,比如自增字段

3、 强制数据一致性

4、 提供审计和日志记录

5、 防止无效的事务处理

6、 启用复杂的业务逻辑

触发器触发时间有两种:after和before。

1、触发器的语法:

CREATE [OR REPLACE] TIGGER触发器名 触发时间 触发事件

ON表名

[FOR EACH ROW]

BEGIN

pl/sql语句

END

其中:

触发器名:触发器对象的名称。

由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。

触发时间:指明触发器何时执行,该值可取:

before---表示在数据库动作之前触发器执行;

after---表示在数据库动作之后出发器执行。

触发事件:指明哪些数据库动作会触发此触发器:                        

insert:数据库插入会触发此触发器;

Oracle触发器语法(二)Oracle触发器详解


update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。

表 名:数据库触发器所在的表。

for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

2、举例:

下面的触发器在更新表auths之前触发,目的是不允许在周末修改表:



      create triggerauth_secure before insert or update or delete //对整表更新前触发


on auths

begin

if(to_char(sysdate,'DY')='SUN'

RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');

end if;

end




例子:



  CREATE OR REPLACE TRIGGER CRM.T_SUB_USERINFO_AUR_NAME AFTER UPDATE OF STAFF_NAME


ON CRM.T_SUB_USERINFO

REFERENCING OLD AS OLD NEW AS NEW

FOR EACH ROW

declare

begin

if :NEW.STAFF_NAME!=:OLD.STAFF_NAME then

begin




•客户投诉 


  update T_COMPLAINT_MANAGE set SERVE_NAME=:NEW.STAFF_NAME where SERVE_SEED=:OLD.SEED;



•客户关怀


      update T_CUSTOMER_CARE set EXECUTOR_NAME=:NEW.STAFF_NAME


where EXECUTOR_SEED=:OLD.SEED;




•客户服务 


      update T_CUSTOMER_SERVICE set EXECUTOR_NAME=:NEW.STAFF_NAME


where EXECUTOR_SEED=:OLD.SEED;

end;

end if;

end T_sub_userinfo_aur_name;

/







开始:



      create triggerbiufer_employees_department_id


beforeinsertorupdateofdepartment_idonemployees

referencingoldasold_value newasnew_value

for each row

when (new_value.department_id<>80 )

begin

:new_value.commission_pct :=0;

end;

/




1、触发器的组成部分:

1、 触发器名称

2、 触发语句

3、 触发器限制

4、 触发操作

1.1、触发器名称



      create trigger biufer_employees_department_id



命名习惯:



      biufer(before insert update for each row)



employees表名

department_id列名

1.2、触发语句

比如:

表或视图上的DML语句

DDL语句
Oracle触发器语法(四)


数据库关闭或启动,startup shutdown等等 


      before insert or update


of department_id

on employees

referencing old as old_value

new as new_value

for each row




说明:

1、 无论是否规定了department_id,对employees表进行insert的时候

2、 对employees表的department_id列进行update的时候

1.3、触发器限制



      when (new_value.department_id<>80 )



限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。

其中的new_value是代表更新之后的值。

1.4、触发操作

是触发器的主体 



      begin


:new_value.commission_pct :=0;

end;




主体很简单,就是将更新后的commission_pct列置为0

触发:



      insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,


department_id,salary,commission_pct )

values( 12345,’Chen’,’Donny’, sysdate, 12, ‘donny@hotmail.com’,60,10000,.25);

select commission_pct from employees where employee_id=12345;




触发器不会通知用户,便改变了用户的输入值。Oracle触发器语法(四)



数据库关闭或启动,startup shutdown等等 



      before insert or update


of department_id

on employees

referencing old as old_value

new as new_value

for each row




说明:

1、 无论是否规定了department_id,对employees表进行insert的时候

2、 对employees表的department_id列进行update的时候

1.3、触发器限制



      when (new_value.department_id<>80 )



限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。

其中的new_value是代表更新之后的值。

1.4、触发操作

是触发器的主体 



      begin


:new_value.commission_pct :=0;

end;




主体很简单,就是将更新后的commission_pct列置为0

触发:



      insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,


department_id,salary,commission_pct )

values( 12345,’Chen’,’Donny’, sysdate, 12, ‘donny@hotmail.com’,60,10000,.25);

select commission_pct from employees where employee_id=12345;



分享到:
评论

相关推荐

    Oracle 触发器语法及实例基础知识

    通过理解和掌握Oracle触发器的语法及实例,开发者能够更好地控制和维护数据库中的数据,实现更复杂、灵活的业务逻辑。在实际开发中,根据需求合理使用触发器,可以提高数据库的稳定性和安全性。

    触发器

    通过阅读`ORACLE 触发器语法及实例.txt`和`Oracle触发器语法(一) .txt`文件,你可以更深入地了解Oracle触发器的各种细节和更多实用示例。这些文档可能会涵盖如复合触发器、行级和语句级触发器的差异、如何禁用和启用...

    oracle触发器实例

    5. 触发器语法: - `CREATE TRIGGER trigger_name [BEFORE | AFTER] {INSERT | UPDATE [OF column_list] | DELETE} ON table_name [FOR EACH ROW]` - `trigger_name`:触发器的名称。 - `BEFORE`或`AFTER`:...

    oracle触发器

    ### Oracle触发器详解 在Oracle数据库管理中,触发器是一种非常强大的工具,它允许你在特定的数据库事件(如数据插入、更新或删除)发生时自动执行预定义的SQL语句或PL/SQL代码块。这使得数据库能够在无需外部程序...

    Oracle触发器用法实例详解

    二、触发器语法 创建触发器的基本语法如下: ```sql CREATE [OR REPLACE] TRIGGER 触发器名 {BEFORE | AFTER} {INSERT | UPDATE [OF column_list] | DELETE} ON 表名 [FOR EACH ROW] BEGIN PL/SQL语句; END; ``...

    oracle资料

    5. **Oracle触发器语法及实例**:触发器是一种数据库对象,当满足特定事件(如INSERT、UPDATE或DELETE)时自动执行。它们可以用来实现复杂的业务规则,但过度使用也可能导致性能问题。理解触发器的工作原理、编写...

    oracle中记录用户登录信息的触发器的例子

    ### Oracle中记录用户登录信息的触发器实例解析 #### 一、背景介绍 在Oracle数据库管理中,确保数据安全是一项至关重要的任务。其中,记录用户的登录信息(如登录时间、用户名和客户端IP地址等)可以帮助管理员更...

    oracle触发器1.ppt

    Oracle触发器是数据库管理系统中的一种重要机制,它允许在特定的数据库操作(如INSERT、UPDATE、DELETE)或者系统事件(如数据库启动和关闭)发生时,自动执行预定义的存储过程或逻辑。触发器作为独立的对象存在于...

    oracle触发器(trigger).pdf

    Oracle触发器是一种数据库对象,它在数据库管理系统中自动执行,在满足特定条件时被调用,无需用户直接操作。触发器能够响应数据表的DML操作(INSERT、UPDATE、DELETE)以及DDL操作(如CREATE、ALTER、DROP)等事件...

    oracle数据库语法

    Oracle 数据库语法包括了查询语法、函数、视图、存储过程、触发器等多种元素,以下是 Oracle 数据库语法的详细知识点。 Oracle 简介 Oracle 是一种关系数据库管理系统(RDBMS),它由 Oracle Corporation 开发,...

    Oracle语法实例讲解chm

    Oracle数据库系统是全球广泛使用的大型关系数据库管理系统,它在企业级数据存储、管理和处理方面具有卓越性能。Oracle的客户端/服务器架构...《Oracle语法实例讲解》这样的资源可以帮助你进一步提升Oracle技能。

    Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本

    在"Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本"中,读者可以深入理解PL/SQL的各种概念和实践技巧。 本书详细讲解了Oracle 11g版本中的PL/SQL语言,这涵盖了从基础语法到高级特性的广泛范围。PL/SQL是...

    Oracle触发器在科技行政纪监系统中的应用与实现.pdf

    【Oracle触发器在科技行政纪监系统中的应用与实现】 Oracle触发器是关系型数据库管理系统Oracle中的一个重要特性,主要用于响应数据库中的特定事件,如插入、更新或删除数据。当这些事件发生时,触发器会自动执行...

    Oracle触发器

    本文将深入探讨Oracle触发器的创建、类型、工作原理及其应用实例。 #### 触发器的类型与作用 在Oracle中,触发器主要分为两大类:语句级触发器和行级触发器。语句级触发器作用于整个表上的操作,而行级触发器则...

    SQL触发器知识和实例

    例如,Oracle 和 SQL Server 的触发器创建语法就有一定的区别。 **3. 触发器的用途** - **数据一致性**:确保数据符合特定的规则和约束。 - **审计跟踪**:记录数据更改的历史。 - **级联更新/删除**:在更新或删除...

    oracle pl sql 实例精解 源代码

    读者可以通过操作这些预先设定的模式,学习如何在Oracle数据库中创建和管理对象,了解数据类型、约束、触发器(TRIGGER)以及数据库对象权限的管理。 最后,ChapterExampleScripts.zip可能包含的是各章的示例脚本,...

    Oracle SQL语法速查

    Oracle SQL语法速查指南 Oracle数据库系统是世界上最广泛使用的数据库管理...在实际工作中,应结合具体场景灵活运用,不断探索Oracle的高级特性,如索引、触发器、存储过程等,以提高数据库性能和应用程序的可靠性。

    oracle对象创建实例

    在Oracle数据库管理中,对象创建是数据库管理员和开发人员日常工作中不可或缺的一部分。...在探索"oracle学习"这个压缩包文件的内容时,你可以找到更多关于这些主题的实例和练习,以深化你的理解和实践能力。

    Oracle语法指南.zip

    本"Oracle语法指南"提供了全面的Oracle SQL语法参考和实例解析,旨在帮助用户更好地理解和掌握Oracle数据库的操作。 首先,"oracle语法.txt"可能包含了Oracle SQL的基础到高级语法,例如: 1. **数据类型**:...

Global site tag (gtag.js) - Google Analytics