oralce优化:两个触发器 与 一个触发器+过程 对比谁快??

cool906 2007-04-20 05:28:45
库中有业务表,上面了一触发器.前天触发器代码长度突破8000行报代码过长,编译不过去,后来改成两个触发器 (功能是一样的) .随着这两天不停的加业务处理代码,两个触发器代码和起来超过12000行.我想将后加的那个触发器改为一个包,包中有两个函数,一个实现原来的功能,一个是捕抓异常的过程. 第一个触发器内调用过程,实现原两个触发器功能.

大家帮忙讨论下,哪个更优.

我的触发器:(原)
create or replace trigger ins_crm_for_sa
after insert on sp.crm_for_sa
for each row
DECLARE
begin
..................

end;


我的触发器2:(原)
create or replace trigger ins_crm_for_sa_cd --其实跟第一个一样,就是代码不一样而已,主要是解决oracle要求触发器代码不能超过8000多的限制
after insert on sp.crm_for_sa
for each row
DECLARE
begin
..................

end;

现在我新定的包:
create or replace package pkg_cfs is

-- Author : wanghd testedition
-- Created : 2007-4-20 13:46:05
-- Purpose : 给sp传参 捕抓异常

--将第二个触发器改成过程实现
--1.传递co_id,prod_spec_id,order_type_cd,var_prod_id
--2.var_new_value var_old_value 提供给后面同志的自定义参数,不规定具体传何值.
--3.是否还需要传什么公用的参数??? 下一步可能考虑增加一个 number 的参数 或者 var_errcode out number 其中0代表无子模块发生异常1代表有

procedure proc_crm_for_sa(var_area_id in crm.area.area_id%TYPE,
var_co_id in crm.cust_order.co_id%Type ,
var_prod_spec_id in crm.cust_order.prod_spec_id%TYPE,
var_order_type_cd in sp.Crm_For_Sa.Order_Type_Id%TYPE ,
var_prod_id in crm.product.prod_id%TYPE,
var_new_value in varchar2,
var_old_value in varchar2);
--为增加crm调测方便 ,我建议增加异常收集
--1.建立记录异常记录的表
--2.目前不用,需要时再用
/*CREATE TABLE exception_crm_for_sa
(
co_id varchar2(15) not null,
prod_spec_id varchar2(15) not null,
item_spec_id varchar2(15) not null,
status varchar2(15) default '',
err_sqlcode varchar2(30) default '',
beizhu varchar2(50) default ''

) ;

*/
procedure catch_excep_cfs (co_id in varchar2 ,
prod_spec_id in varchar2 ,
item_spec_id in varchar2 ,
status in varchar2 ,
err_sqlcode in varchar2 ,
beizhu in varchar2 ) ;


end pkg_cfs;
...全文
233 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
junval 2007-04-22
  • 打赏
  • 举报
回复
触发器的执行效率比过程低

建议使用一个过程 + 一个触发器 不要使用两个触发器

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧