小弟想写一个存储过程,需求如下
表: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;优化存储数据库