小弟想写一个存储过程,需求如下
表:tb_ac001
表中字段:TELD, TELH, TELN,TELI,HP_TELD, HP_TELH ,HP_TELN,CUST_LVL
需求:
传入一个变量ANI_Code ,用这个ANI_Code作为条件与TELD, TELH, TELN,TELI这四个拼接出来的值,或者HP_TELD, HP_TELH ,HP_TELN 这三个字段拼接出的值做比较,如果只有一条数据,那么需要找到CUST_LVL的值并作为一个变量输出,如果没有数据或者有两条以上的数据那么直接赋值变量输出。我发现我一个select count *,在数据库中就跑了5秒。。让我很无语。求各位路过的大神帮忙优化一下,小弟感激不尽。。谢谢
create or replace procedure PD_GetCustlvl( ANI_Code IN varchar2,DNIS_Code OUT varchar2
) is
i integer;
ai_ani_code varchar2(20);
begin
ai_ANI_Code := substr(ANI_Code,-11,11);
select count(*)
into i
from tb_ac001
where substr(TELD || TELH || TELN || TELI,-11,11) =ai_ani_code or HP_TELD || HP_TELH|| HP_TELN = ai_ANI_Code;
--如果有手机记录,并且只有1条
if i = 1 then
select decode(CUST_LVL_CD,
'90',
'10',
'80',
'20',
'50',
'30',
'40',
'40',
'30',
'50',
'20',
'80',
'10',
'90',
'no')
into DNIS_Code
from tb_ac001
where substr(TELD || TELH || TELN || TELI,-11,11) = ai_ANI_Code or HP_TELD || HP_TELH|| HP_TELN = ai_ANI_Code;
--如果记录不只1条
else
if i <> 1 then
DNIS_Code := 30;
end if;
end if;
end PD_GetCustlvl;优化存储数据库
表:tb_ac001
表中字段:TELD, TELH, TELN,TELI,HP_TELD, HP_TELH ,HP_TELN,CUST_LVL
需求:
传入一个变量ANI_Code ,用这个ANI_Code作为条件与TELD, TELH, TELN,TELI这四个拼接出来的值,或者HP_TELD, HP_TELH ,HP_TELN 这三个字段拼接出的值做比较,如果只有一条数据,那么需要找到CUST_LVL的值并作为一个变量输出,如果没有数据或者有两条以上的数据那么直接赋值变量输出。我发现我一个select count *,在数据库中就跑了5秒。。让我很无语。求各位路过的大神帮忙优化一下,小弟感激不尽。。谢谢
create or replace procedure PD_GetCustlvl( ANI_Code IN varchar2,DNIS_Code OUT varchar2
) is
i integer;
ai_ani_code varchar2(20);
begin
ai_ANI_Code := substr(ANI_Code,-11,11);
select count(*)
into i
from tb_ac001
where substr(TELD || TELH || TELN || TELI,-11,11) =ai_ani_code or HP_TELD || HP_TELH|| HP_TELN = ai_ANI_Code;
--如果有手机记录,并且只有1条
if i = 1 then
select decode(CUST_LVL_CD,
'90',
'10',
'80',
'20',
'50',
'30',
'40',
'40',
'30',
'50',
'20',
'80',
'10',
'90',
'no')
into DNIS_Code
from tb_ac001
where substr(TELD || TELH || TELN || TELI,-11,11) = ai_ANI_Code or HP_TELD || HP_TELH|| HP_TELN = ai_ANI_Code;
--如果记录不只1条
else
if i <> 1 then
DNIS_Code := 30;
end if;
end if;
end PD_GetCustlvl;优化存储数据库
select count(1) .....