ORACLE触发器在软件开发中的应用------论文
触发器及应用

触发器及应用触发器是一种数据库对象,它是与表相关联的特殊类型的存储过程。
当满足特定的条件时,触发器会自动执行相应的动作。
触发器可以用于实现数据完整性的约束和业务逻辑的复杂处理,具有很大的灵活性和功能性。
触发器的应用可以总结为以下几个方面:1. 数据完整性约束:触发器可以用于在更新、插入和删除数据时进行数据完整性验证。
例如,可以创建一个触发器,限制某个表中的数据满足某个特定的约束条件。
当有数据不满足约束条件时,触发器可以阻止数据的修改操作。
2. 复杂业务逻辑处理:触发器还可以用于处理复杂的业务逻辑。
例如,在订单表中创建一个触发器,在插入订单数据时自动计算订单的总金额并更新到订单表中。
这样,无论在任何地方插入订单数据,都可以确保总金额的正确计算。
3. 数据同步和复制:触发器还可以用于数据同步和复制。
当主数据库的数据发生变化时,可以创建一个触发器,将变化的数据自动同步到其他的数据库中。
这样可以确保不同的数据库之间的数据一致性。
4. 审计和日志记录:触发器可以用于实现审计和日志记录功能。
例如,在修改某个表中的数据时,可以创建一个触发器,在每次修改时记录相关的操作信息,包括修改时间、修改用户等信息。
5. 数据转换和处理:触发器还可以用于数据的转换和处理。
例如,可以创建一个触发器,在插入数据时将某个字段的值进行相关处理,例如转换为大写或小写,或者根据其他字段的值进行计算等操作。
总的来说,触发器是一种非常强大和灵活的数据库对象,它可以用于实现数据完整性约束和复杂业务逻辑处理,同时也可以用于数据同步和复制、审计和日志记录,以及数据转换和处理等方面。
通过合理地使用触发器,可以提高数据库的性能和安全性,提升应用程序的功能和稳定性。
在实际开发中,我们需要根据具体的需求和业务场景,合理地设计和使用触发器,以达到最佳的效果。
触发器的作用

触发器的作用触发器是一种在数据库中定义的特殊对象,它可以在指定的数据库事件发生时自动执行一系列的操作。
触发器可以用于实现数据的完整性约束、实时数据更新以及审计等功能。
以下是触发器的主要作用:1. 数据完整性约束:触发器可以用来实现数据库中的各种完整性约束,如主键约束、外键约束、唯一约束、检查约束等。
通过在触发器中编写相关的逻辑,当数据操作违反完整性约束时,触发器将阻止对数据的更新,从而保证数据库中的数据的完整性和一致性。
2. 实时数据更新:触发器可以在数据库中进行实时数据的更新操作。
在触发器中编写相关的逻辑,当某个事件发生时,触发器会自动更新相关的数据,从而保持数据库中的数据的实时性。
例如,在订单表中定义一个触发器,当新的订单被插入时,触发器可以自动更新库存表中的库存数量。
3. 数据审计:触发器可以用于实现对数据库的数据操作进行审计。
通过在触发器中编写相关的逻辑,当某个事件发生时,触发器会记录下相关的操作日志,包括操作的用户、操作的时间、操作的类型等信息。
这样可以方便对数据库的操作进行跟踪和分析,以确保数据的安全性和合规性。
4. 数据转换和验证:触发器可以对即将插入、更新或删除的数据进行转换和验证。
通过在触发器中编写相关的逻辑,可以对数据进行格式转换、数据验证以及数据的默认值设置等操作,从而确保数据库中的数据的有效性和一致性。
5. 触发其他业务处理:触发器可以触发其他的业务处理。
通过在触发器中编写相关的逻辑,可以触发其他的存储过程、函数或者任务,并进行一系列的业务处理,从而实现数据库的业务逻辑的自动化处理。
总之,触发器在数据库中具有广泛的应用,它能够帮助我们实现数据的完整性约束、实时数据的更新、数据的审计和验证以及触发其他的业务处理,从而提高数据库的安全性、一致性和可靠性。
但是,在使用触发器时需要注意合理设计和优化,避免触发器的过度使用和性能的问题。
oracle触发器调用java类

Guxy亲测Oracle触发器调用java类
1将java程序load进数据库
把JAVA程序LOAD进oracle在$ORACLE_HOME/bin目录下有个LOADJAVA命令,使用这个命令将刚写好的JAVA程序LOAD进数据库。
loadjava -user jkt/jkt@orcl -o -v -f -r c:\ OracleTriggerJava.java
如果成功的话,会打印出来信息提示成功,若程序有编译错误的话,也会提示你错误的地方。
说明:jkt是oracle用户名
2修改权限
修改权限因为我的这个JAVA程序里涉及到对文件的读写操作,所以要先修改权限。
首先以管理员身份登录进数据库
sqlplus / as sysdba
然后执行
执行完毕后,在数据库里执行上述JAVA程序时,就拥有读写该文件的权限了。
3创建存储过程
会提示创建存储过程成功。
4创建trigger
在ORACLE的trigger里调用JAVA程序就完成了,后来的实验证明,每当更新这个表时,
都确实执行了该JAVA程序,完成了对文件的读写。
5附件OracleTriggerJava.java。
跟我学Oracle数据库系统管理和实现——Oracle数据库DML触发器应用技术及应用实例

(2)触发器的程序代码示例
(3)注意代码中的someOneSequenceName是一个序列号的 名称,首先要定义出 (4)而someOneSequenceName.NEXTVAL获得序列号的下一 个唯一的序列值,因此如下的语句也就是把那个唯一的序 列值填写到 someOneTableName数据库表的ID字段。 “SELECT someOneSequenceName.NEXTVAL INTO :NEW.ID FROM DUAL;”
(3)利用下面的代码触发该触发器的执行 (4)在输出控制台中出现警告信息。
(5)对前面的示例也可以采用可视化方式实现
6、语句级触发器应用示例二 (1)为什么要应用触发器实现此功能
下面的触发器示例实现在插入数据库表数据时自动为 该表中的ID字段赋值,从而可以自动生成ID字段的值。
之所以应用触发器实现此功能,是因为在Oracle数据 库系统中不直接支持自动递增的数据列,因此需要创建出 一个序列SEQUENCE。
Oracle 数据库 DML触发器 应用技术及应用实例
1、DML触发器是定义在一个表或视图(针对某个数据库表 的视图)上的触发器
(1)什么是DML触发器
DML触发器是指基于DML操作所建立的触发器,DML触发 器是最常用的触发器,一旦建立了DML触发器后,如果发生 了DML操作(insert、delete或update等)就会执行相应的 触发器所指定的程序代码。
由于CUSTOMER_INFO表和CONTRACT_INFO数据库表产生 一对多的关联关系,当删除一个客户信息时,对应的合同 信息也级联删除。
(2)代码示例
(2)创建行级触发器的语法 格式
Oracle触发器trigger详解

Oracle触发器trigger详解触发器相关概念及语法,供⼤家参考,具体内容如下概述本篇博⽂中主要探讨以下内容:什么是触发器触发器的应⽤场景触发器的语法触发器的类型案例数据:触发器的概念和第⼀个触发器数据库触发器是⼀个与表相关联的,存储的PL/SQL 语句。
每当⼀个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle⾃动执⾏触发器中定义的语句序列。
举个简单的例⼦:当员⼯表中新增⼀条记录后,⾃动打印“成功插⼊新员⼯”create or replace trigger insertStaffHintafter insert on xgj_testfor each rowdeclare-- local variables herebegindbms_output.put_line('新增员⼯成功');end insertStaffHint;触发器的应⽤场景复杂的安全性检查数据的确认数据库审计数据的备份和审计触发器的语法CREATE [OR REPLACE] TRIGGER trigger_name{BEFORE | AFTER }{INSERT | DELETE | UPDATE [OF column [, column …]]}[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]ON [schema.]table_name | [schema.]view_name[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}][FOR EACH ROW ][WHEN condition]PL/SQL_BLOCK | CALL procedure_name;其中:BEFORE 和AFTER指出触发器的触发时序分别为前触发和后触发⽅式,前触发是在执⾏触发事件之前触发当前所创建的触发器,后触发是在执⾏触发事件之后触发当前所创建的触发器。
oracle 触发器中 用 v_$session 问题讨论

oracle 触发器中用v_$session 问题讨论在非系统用户底下建触发器时引用v$session记录类型时出现问题错误:“表和视图不存在”但是在pl/sql 中是可以运行select * from v$session 的v$session是同义词,v_$session是视图需要以下处理:可直接授权sys : grant select on v_$session to youruser;说明:这是个很好的问题一个普通用户,具有了select any dictionary的权限后,就可以访问任何一个系统视图,包括v$session,由于dba角色包含了select any dictionary的权限,所以你的hospital用户select * from v$session是没问题的但是你在PL/SQL中,要参照一个表rowtype或者在定义cursor的时候使用到某个表,那你得在这个表上有select权,尽管你的dba角色有select any table的权限,但由于在9i 中规定在初始化参数O7_DICTIONARY_ACCESSIBILITY取缺省值(false)的情况下,一个用户即使有select any table的权限,却还是不能访问sys对象的,除非1 把O7_DICTIONARY_ACCESSIBILITY设置为true,也就是偶说的做法或者2 直接把sys对象的select权授予给这个用户,也就是biti所说的做法在存储对象中引用字典表(视图)必须单独授权SQL> select synonym_name,table_name from dba_synonyms where synonym_name like '%SESSION%';SYNONYM_NAME TABLE_NAME------------------------------ ------------------------------V$SESSION V_$SESSIONv$session是同义词,v_$session是视图这个问题,本质上,是pl/sql程序的特点的问题在pl/sql程序设计一书中有讲到,由于pl/sql 的编译的一些特性,oracle 采取了角色在存储过程、函数、包等有名pl/sql 中不起作用的策略,必须直接授权才生效,所以即使有dba角色在存储过程中也是无效的。
ORACLE触发器的技术

ORACLE触发器的技术研究朱 伟(淮北矿业集团 通讯计算机处 安徽 淮北 235000)摘 要: 介绍DML触发器、替代触发器和系统触发器,它们是存储在数据库里的特殊存储过程。
当表、视图发生改变或发生特定用户事件、系统事件时将隐式激发定义在其上的触发器,数据库将自动执行触发器。
触发器能被作为数据库内置审计功能的有益补充用于审计。
关键词: DML触发器;替代触发器;系统触发器中图分类号:TP311 文献标识码:A 文章编号:1671-7597(2012)1120145-010 引言目前企业的计算机应用系统多数都是基于数据库的,在使用这些应用系统的时候,不可避免的要遇到一些数据库中有关数据完整性、批量删除和审计方面的问题。
在这方面触发器能很好的实现复杂的数据完整性检查和约束,拒绝或回退那些破坏相关完整性的变化;审计用户操作数据库的语句。
本文就是对Oracle触发器技术进行的介绍。
1 Oracle触发器的概念和类型数据库触发器是响应插入、更新或删除等数据库事件而执行的过程,它定义了当一些数据库相关事件发生时应采取的动作。
有三种主要的触发器类型:DML触发器、替代触发器和系统触发器。
1.1 DML触发器。
DML触发器就是对表或视图执行DML操作时激发的触发器,并且由该语句的类型决定DML触发器的类型。
它是一个与特定表相关联的存储过程,也就是说一个DML触发器仅与一个表相关联,但一个表可以对应多个DML触发器。
DML触发器分为行触发器和语句触发器,触发事件包括insert、update和delete,触发的时间可以在DML语句之前或之后。
1.2 替代触发器。
替代触发器只能定义在视图上而不能定义在表上,它由视图的DML事件激发而非DDL或数据库系统事件激发,它执行一个替代操作来代替触发语句的操作。
与DML触发器不同,DML触发器是在DML操作之外运行的,而替代触发器则代替激发它的DML语句运行。
替代触发器是行一级的。
oracle触发器的实例(转)

oracle触发器的实例(转)触发器使⽤教程和命名规范⽬录触发器使⽤教程和命名规范 11,触发器简介 12,触发器⽰例 23,触发器语法和功能 34,例⼀:⾏级触发器之⼀ 45,例⼆:⾏级触发器之⼆ 46,例三:INSTEAD OF触发器 67,例四:语句级触发器之⼀ 88,例五:语句级触发器之⼆ 99,例六:⽤包封装触发器代码 1010,触发器命名规范 111,触发器简介触发器(Trigger)是数据库对象的⼀种,编码⽅式类似存储过程,与某张表(Table)相关联,当有DML语句对表进⾏操作时,可以引起触发器的执⾏,达到对插⼊记录⼀致性,正确性和规范性控制的⽬的。
在当年C/S时代盛⾏的时候,由于客户端直接连接数据库,能保证数据库⼀致性的只有数据库本⾝,此时主键(Primary Key),外键(Foreign Key),约束(Constraint)和触发器成为必要的控制机制。
⽽触发器的实现⽐较灵活,可编程性强,⾃然成为了最流⾏的控制机制。
到了B/S时代,发展成4层架构,客户端不再能直接访问数据库,只有中间件才可以访问数据库。
要控制数据库的⼀致性,既可以在中间件⾥控制,也可以在数据库端控制。
很多的青睐Java的开发者,随之将数据库当成⼀个⿊盒,把⼤多数的数据控制⼯作放在了Servlet中执⾏。
这样做,不需要了解太多的数据库知识,也减少了数据库编程的复杂性,但同时增加了Servlet编程的⼯作量。
从架构设计来看,中间件的功能是检查业务正确性和执⾏业务逻辑,如果把数据的⼀致性检查放到中间件去做,需要在所有涉及到数据写⼊的地⽅进⾏数据⼀致性检查。
由于数据库访问相对于中间件来说是远程调⽤,要编写统⼀的数据⼀致性检查代码并⾮易事,⼀般采⽤在多个地⽅的增加类似的检查步骤。
⼀旦⼀致性检查过程发⽣调整,势必导致多个地⽅的修改,不仅增加⼯作量,⽽且⽆法保证每个检查步骤的正确性。
触发器的应⽤,应该放在关键的,多⽅发起的,⾼频访问的数据表上,过多使⽤触发器,会增加数据库负担,降低数据库性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle触发器在软件开发中的应用马以墨08计科2班2008221111210003一.引言:oracle触发器在软件开发中的应用,为了数据分析和制作报表的需要,用户在数据模型中加入了冗余数据,应使用触发器,以保证数据的完整性。
关键词:软件开发、触发器、oracle。
二.Oracle触发器1.oracle触发器简介触发器(Trigger)是数据库对象的一种,编码方式类似存储过程,与某张表(Table)相关联,当有DML语句对表进行操作时,可以引起触发器的执行,达到对插入记录一致性,正确性和规范性控制的目的。
在当年C/S时代盛行的时候,由于客户端直接连接数据库,能保证数据库一致性的只有数据库本身,此时主键(Primary Key),外键(Foreign Key),约束(Constraint)和触发器成为必要的控制机制。
而触发器的实现比较灵活,可编程性强,自然成为了最流行的控制机制。
到了B/S时代,发展成4层架构,客户端不再能直接访问数据库,只有中间件才可以访问数据库。
要控制数据库的一致性,既可以在中间件里控制,也可以在数据库端控制。
很多的青睐Java的开发者,随之将数据库当成一个黑盒,把大多数的数据控制工作放在了Servlet中执行。
这样做,不需要了解太多的数据库知识,也减少了数据库编程的复杂性,但同时增加了Servlet编程的工作量。
从架构设计来看,中间件的功能是检查业务正确性和执行业务逻辑,如果把数据的一致性检查放到中间件去做,需要在所有涉及到数据写入的地方进行数据一致性检查。
由于数据库访问相对于中间件来说是远程调用,要编写统一的数据一致性检查代码并非易事,一般采用在多个地方的增加类似的检查步骤。
一旦一致性检查过程发生调整,势必导致多个地方的修改,不仅增加工作量,而且无法保证每个检查步骤的正确性。
触发器的应用,应该放在关键的,多方发起的,高频访问的数据表上,过多使用触发器,会增加数据库负担,降低数据库性能。
而放弃使用触发器,则会导致系统架构设计上的问题,影响系统的稳定性。
2.Oracle触发器功能触发器是特定事件出现的时候,自动执行的代码块。
类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。
功能:1)允许/限制对表的修改2)自动生成派生列,比如自增字段3)强制数据一致性4)提供审计和日志记录5)防止无效的事务处理6)启用复杂的业务逻辑3.触发器的概念和类型数据库触发器(database triggers)是响应插入、更新或删除等数据库事件而执行的过程。
它定义了当一些数据库相关事件发生时应采取的动作。
可用于管理复杂的完整性约束,或监控对表的修改,或通知其它程序,表已发生修改。
它的类型有:语句级触发器,以及行级触发器,前者可以在语句执行前或执行后被触发。
后者在每个触发语句影响的行触发一次。
还有before和after触发的命令。
在insert,update,和delete之前或之后执行,引用新旧值进行处理。
如果需通过触发器设定插入行中的某列值,则为了访问“新(new)”值,需使用一个触发器before insert,使用after insert则不行。
Instead of 触发器命令,使用它告诉oracle应执行什么操作。
以上四种大类合成14种小类(略)。
各种触发器的执行顺序如下:⑴ 如果有,最先执行语句级before触发器。
⑵ 每个insert,delete,update影响的行;① 如果有,最先执行行级before;② 执行行的delete或update;③ 如果有,执行行级after触发器;⑶ 如果有,执行语句级after触发器。
4.触发器的组成部分1、触发器名称2、触发语句3、触发器限制4、触发操作(1)、触发器名称create trigger biufer_employees_department_id命名习惯:biufer(before insert update for each row)employees 表名department_id 列名(2)、触发语句比如:表或视图上的DML语句 DDL语句触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。
数据库触发器有以下的作用:●安全性。
可以基于数据库的值使用户具有操作数据库的某种权利。
●可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据。
●可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%。
●审计。
可以跟踪用户对数据库的操作。
●审计用户操作数据库的语句。
●把用户对数据库的更新写入审计表。
●实现复杂的数据完整性规则。
●实现非标准的数据完整性检查和约束。
触发器可产生比规则更为复杂的限制。
与规则不同,触发器可以引用列或数据库对象。
例如,触发器可回退任何企图吃进超过自己保证金的期货。
●提供可变的缺省值。
●实现复杂的非标准的数据库相关完整性规则。
触发器可以对数据库中相关的表进行连环更新。
例如,在auths表author_code列上的删除触发器可导致相应删除在其它表中的与之匹配的行。
●在修改或删除时级联修改或删除其它表中的与之匹配的行。
●在修改或删除时把其它表中的与之匹配的行设成NULL值。
●在修改或删除时把其它表中的与之匹配的行级联设成缺省值。
●触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。
当插入一个与其主健不匹配的外部键时,这种触发器会起作用。
例如,可以在books.author_code列上生成一个插入触发器,如果新值与auths.author_code列中的某值不匹配时,插入被回退。
●同步实时地复制表中的数据。
●自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理5.使用数据库触发器管理数据冗余性为了数据分析和制作报表的需要,用户在数据模型中加入了冗余数据,应使用触发器,以保证数据的完整性。
冗余数据可以用规定的 for each row选项的before update触发器进行管理。
update 命令可放在触发器中对所有需要更新的冗余数据进行更新,如客户表和订单表,订单表包括客户的订单和客户表的冗余信息,客户表(customer)的表结构:客户号(cu_no)、客户名(cu_name)、客户地址(cu_address)。
订单表(order)的表结构:订单号(or_no),客户号(or_no),客户名(cu_name),客户地址(cu_address),当客户基表中的数据被更新时更新订单中的冗余列。
语法如下:6.用触发器完成数据复制如果需求非常有限,可以用数据触发器从一个数据库中向另一个数据库复制数据,如果数据复制需求仅与数据的插入有关,当一条记录插入到一个数据库中的某个基表中时,用户还希望把这条记录插入到一个远程数据库中,需用create database link语句创建一条到远程数据库的连接,一旦创建了一条数据库连接后,就可以在基表上创建一个after insert触发器,以把每一条记录插入到远程数据库中。
(1)在脚本中创建数据库连接(database link)bj_ysd_remote基表作为数据库基表,Bj_ysd_local代表本地数据库上的源基表。
(2)复制记录(3)删除记录7.用数据库触发器完成瀑布式删除操作在某些情况下,当要删除一条记录时,该记录是与外键有关的另外一张基表上的记录时,这个删除操作必须在模型中进行传递,否则会出现大量的冗长数据,仍以cumstomer 和order基表为例,当从customer中删除一个客户时,order基表中所有相关记录也应当删除。
8.用触发器完成动态数据的操作在涉及如何实现动态库存的问题时,可用触发器解决。
仓库有验收、出库、调拨、报废、退料、让售等这些数据必须与以前的库存相加减,才能完成动态库存操作。
本文仅以验收单触发器为例,其它的结构雷同。
它们涉及到两个基表:bi_ysd (验收单),Bj_kcb(当前库存表),前者的表结构(rq(日期),ysdh(验收单号), bjbm(备件编码),yssl(验收数量),ysdj(验收单价)),后者的表结构为(bjbm(备件编码),dqkcl(当前库存量),dqkcje (当前库存金额))触发器如下:.总结在软件开发中oracle触发器可以提供很多快捷方便的帮助,虽然oracle触发器的用途很多,但是过多的使用触发器或者触发器写得不好,都将影响整个数据库的性能。
因此,使用触发器的时候必须权衡各方面的因素,在适当的时候使用恰当的触发器。
参考文献:[1]刘卫宏:SQL Server 2000实用教程[M].科学出版社,2003,9[2]姚渝春等:数据库触发器及应用[J].重庆建筑大学学报,2003(5):128~131[3]徐晓阳:触发器在SQL Server数据库开发中的应用[J].电脑开发与应用,[4](美)Scott Urman 著刘谦苏建平等译《Oracle8i PL/SQL 高级程序设计》[5] Steven Feuerstein & Bill Pribyl 著林琪王宇译《Oracle PL/SQL 程序设计》。