库中有业务表,上面了一触发器.前天触发器代码长度突破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;
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;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货