知识大全 Oracle触发器在MIS 开发中的应用
Posted 数据库
篇首语:一卷旌收千骑虏,万全身出百重围。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle触发器在MIS 开发中的应用相关的知识,希望对你有一定的参考价值。
Oracle触发器在MIS 开发中的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
1.引言 本人在做一个大型的MIS系统(前台用powerbuild工具 后台用oracle数据库)时 常碰到一些有关数据冗长性 批量删除和动态信息方面的问题 由此发现数据库触发器简单易用 现将有关开发和应用中的一些体会总结成文 供同行参考 2.触发器的概念和类型 数据库触发器(database triggers)是响应插入 更新或删除等数据库事件而执行的过程 它定义了当一些数据库相关事件发生时应采取的动作 可用于管理复杂的完整性约束 或监控对表的修改 或通知其它程序 表已发生修改 它的类型有 语句级触发器 以及行级触发器 前者可以在语句执行前或执行后被触发 后者在每个触发语句影响的行触发一次 还有before和after触发的命令 在insert update 和delete之前或之后执行 引用新旧值进行处理 如果需通过触发器设定插入行中的某列值 则为了访问 新(new) 值 需使用一个触发器before insert 使用after insert则不行 Instead of 触发器命令 使用它告诉oracle应执行什么操作 以上四种大类合成 种小类(略) 各种触发器的执行顺序如下 ⑴ 如果有 最先执行语句级before触发器 ⑵ 每个insert delete update影响的行 ① 如果有 最先执行行级before ② 执行行的delete或update ③ 如果有 执行行级after触发器 ⑶ 如果有 执行语句级after触发器 3.使用数据库触发器管理数据冗余性 为了数据分析和制作报表的需要 用户在数据模型中加入了冗余数据 应使用触发器 以保证数据的完整性 冗余数据可以用规定的 for each row选项的before update触发器进行管理 update 命令可放在触发器中对所有需要更新的冗余数据进行更新 如客户表和订单表 订单表包括客户的订单和客户表的冗余信息 客户表(customer)的表结构:客户号(cu_no) 客户名(cu_name) 客户地址(cu_address) 订单表(order)的表结构:订单号(or_no) 客户号(or_no) 客户名(cu_name) 客户地址(cu_address) 当客户基表中的数据被更新时更新订单中的冗余列 语法如下 create or replace trigger bj_customer before update on customer for each row begin update order set cu_no=:new cu_no cu_name=:new cu_name cu_address=:new cu_addess where cu_no=:old cu_no end; 4.用触发器完成数据复制 如果需求非常有限 可以用数据触发器从一个数据库中向另一个数据库复制数据 如果数据复制需求仅与数据的插入有关 当一条记录插入到一个数据库中的某个基表中时 用户还希望把这条记录插入到一个远程数据库中 需用create database link语句创建一条到远程数据库的连接 一旦创建了一条数据库连接后 就可以在基表上创建一个after insert触发器 以把每一条记录插入到远程数据库中 ( )在脚本中创建数据库连接(database link)bj_ysd_remote基表作为数据库基表 Bj_ysd_local代表本地数据库上的源基表 Creat database link remote(连接名) Connect to bj(帐户) indentified by bj(密码) Using : ; ( )复制记录 create or replace trigger trig_ysd(触发器名) after insert on bj_ysd_local for each row begin insert into bj_ysd_remote@dblink remote value(:new x :new x ……)/*x x 代表字段名*/ end; ( )删除记录 create or replace trigger trig_ysd_del after delete on bj_ysd_local for each row begin delete from bj_ysd_remote@dblink remote where x =:old x end; 5.用数据库触发器完成瀑布式删除操作 在某些情况下 当要删除一条记录时 该记录是与外键有关的另外一张基表上的记录时 这个删除操作必须在模型中进行传递 否则会出现大量的冗长数据 仍以cumstomer 和order基表为例 当从customer中删除一个客户时 order基表中所有相关记录也应当删除 Create or replace trigger trig_cust Before delete on customer For each row Begin Delete from order Where cu_no=old cu_no End; 6.用触发器完成动态数据的操作 在涉及如何实现动态库存的问题时 可用触发器解决 仓库有验收 出库 调拨 报废 退料 让售等这些数据必须与以前的库存相加减 才能完成动态库存操作 本文仅以验收单触发器为例 其它的结构雷同 它们涉及到两个基表 bi_ysd(验收单) Bj_kcb(当前库存表) 前者的表结构(rq(日期) ysdh(验收单号) bjbm(备件编码) yssl(验收数量) ysdj(验收单价)) 后者的表结构为(bjbm(备件编码) dqkcl(当前库存量) dqkcje(当前库存金额))触发器如下 create or replace trigger trig_ysd after insert or update or delete on bj_ysd for each row declare rq varchar ( );rq varchar ( ); /*限于篇幅 yssl yssl ysdj ysdj bjbm bjbm ii声明略*/ if inserting or updating then rq :=:new rq;bjbm :=:new bjbm;yssl :=:new yssl; ysdj :=:new ysdj; select count(*) into ii from bj_dqkcb where bjbm=bjbm ; if ii= then insert into bj_dqkcb(bjbm dqkcl dqkcje) value(bjbm yssl ysdj ); else update bj_dqkcb set dqkcl=dqkcl+yssl ; dqkcje=dqkcje+yssl *ysdj ; end if end if if deleting or updating then rq :=:old rq;bjbm :=:old bjbm;yssl :=:old yssl; ysdj :=:old ysdj; update bj_dqkcb set dqkcb=dqkcl yssl ; dqkcje=dqkcje yssl *ysdj end if; end ; 7.结束语 数据库触发器在数据库开发 MIS开发上有很广泛的应用 但经验表明 使用过多的触发器将降低整个数据库的性能 如果数据库触发器写得不好 它会很快破坏数据库的性能 因此 在适当的时候使用恰当的触发器显得非常重要 cha138/Article/program/Oracle/201311/18819相关参考
知识大全 MIS中的图像应用技术[DEVELOPER2000]
MIS中的图像应用技术[DEVELOPER2000] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
数据库相关:大型MIS软件的开发必须重视数据库设计 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
1绪论高含盐废水是指含至少总溶解固体TDS(TotalDissolvedSolid)和有机物的质量分数大于等于3.5%的废水,包括高盐生活废水和高盐工业废水。主要来源于直接利用海水的工业生产、生活污水
1绪论高含盐废水是指含至少总溶解固体TDS(TotalDissolvedSolid)和有机物的质量分数大于等于3.5%的废水,包括高盐生活废水和高盐工业废水。主要来源于直接利用海水的工业生产、生活污水
1绪论高含盐废水是指含至少总溶解固体TDS(TotalDissolvedSolid)和有机物的质量分数大于等于3.5%的废水,包括高盐生活废水和高盐工业废水。主要来源于直接利用海水的工业生产、生活污水
知识大全 [Oracle] 如何使用触发器实现IP限制用户登录
[Oracle]如何使用触发器实现IP限制用户登录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在
触发器是一种特殊的存储过程下面是触发器的详细说明 ORACLE触发器 ORACLE产生数据库触发器的语法为 create[orreplace]trigger触发器名触发时间触发事件 on表
Oracle触发器语法及实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一Oracle触发器
Oracle触发器详细介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 触发器 是特定事件出
oracle---Trigger触发器的使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 记录