求救:存储过程SQL语句错误

,case when (months_between(to_date('|| CUR_MONTH ||',''YYYYMM''),
             (case nvl(to_char(b8.recall_time),''0'') when ''0'' then  to_date(to_char(b8.first_call_time,''YYYYMM''),''YYYYMM'')
     else TO_DATE(TO_CHAR(b8.recall_time,''YYYYMM''),''YYYYMM'') end))<=2 )
         then b6.dim_id else bb6.dim_id end    as Create_Lev_Id

上面这句放在存储过程中要执行的字符串的select语句中存在错误,但是把上面放在select语句中,直接拿出来执行,是没有问题的。如

Select /*+full(a1)full(a2)full(b2) full(b3) full(b4) full(b5) full(b6) full(bb6) full(b7) full(b8)*/
    a1.msisdn                        as  msisdn 
   ,a1.Sum_Month                     as  Month_Id
   ,case nvl(a1.home_county,9999) when 595 then 500  else nvl(a1.home_county,9999) end  as Home_Area_Code  
   ,nvl(a1.comp_net_type,9999)       as  Trader_Type_Id   
   ,case when nvl(a1.To_GoTone_AMT,0) >0 then 1 else 0 end  as  To_GoTone_Cnt
   ,case when nvl(a1.To_M_Zone_AMT,0) >0 then 1 else 0 end  as  To_M_Zone_Cnt
   ,case when nvl(a1.To_Pop_AMT,0)    >0 then 1 else 0 end  as  To_Pop_Cnt    
   ,case when nvl(a1.GoTone_To_AMT,0) >0 then 1 else 0 end  as  GoTone_To_Cnt 
   ,case when nvl(a1.M_Zone_To_AMT,0) >0 then 1 else 0 end  as  M_Zone_To_Cnt 
   ,case when nvl(a1.Pop_To_AMT,0)    >0 then 1 else 0 end  as  Pop_To_Cnt    
   ,nvl(a1.Sms_Pcall_Cnt,0)          as  Sms_Pcall_Cnt       
   ,nvl(a1.Sms_Acall_Cnt,0)          as  Sms_Acall_Cnt      
   ,nvl(b2.Dim_Id,9999)              as  To_Mcc_Send_Id   
   ,nvl(b3.Dim_Id,9999)              as  To_Com_Send_Id        
   ,nvl(b4.Dim_Id,9999)              as  Cur_Send_Id       
   ,nvl(b5.Dim_Id,9999)              as  Last_Send_Id      
 
 ,case when months_between(to_date('200510','YYYYMM'),
  (case nvl(to_char(b8.recall_time),'0') when '0' then  to_date(to_char(b8.first_call_time,'YYYYMM'),'YYYYMM')
      else TO_DATE(TO_CHAR(b8.recall_time,'YYYYMM'),'YYYYMM') end))<=1 then
       b6.dim_id else bb6.dim_id end    as Create_Lev_Id 
   
   
    ,nvl(b7.Dim_Id,9999)             as  CallPay_Change_Id       
from
   Temp_FT_MID_COMP_SMS_MONTH         a1, 
   Temp_FT_MID_COMP_SMS_MONTH         a2, 
   qzbase.pre_cfg_dim_value           b2, 
   qzbase.pre_cfg_dim_value           b3, 
   qzbase.pre_cfg_dim_value           b4, 
   qzbase.pre_cfg_dim_value           b5, 
   qzbase.pre_cfg_dim_value           b6, 
   qzbase.pre_cfg_dim_value           bb6,
   qzbase.pre_cfg_dim_value           b7, 
   Temp_Ft_mid_comp_user              b8  
 
    where
       a1.Sum_Month ='200510'
   and a1.msisdn=a2.msisdn(+)
   and a1.comp_net_type in (1001,3001,3002) 
 
   and months_between(To_date('200510','yyyymm'),To_Date(a2.Sum_Month(+) ,'yyyymm') )=1
   and b2.dim_code(+)=200004 
   and a1.Sms_Pcall_Cnt between b2.min_value(+) and b2.max_value(+)-1 
   and b3.dim_code(+)=200004 
   and a1.Sms_Acall_Cnt between b3.min_value(+) and b3.max_value(+)-1 
   and b4.dim_code(+)=200004 
   and nvl(a1.Sms_Acall_Cnt,0) +nvl(a1.Sms_Pcall_Cnt ,0) between b4.min_value(+) and b4.max_value(+)-1 
   and b5.dim_code(+)=200004 
   and nvl(a2.Sms_Acall_Cnt,0) +nvl(a2.Sms_Pcall_Cnt ,0) between b5.min_value(+) and b5.max_value(+)-1 
  
  --如果recall_time是空的话就取first_call_time,否则取recall_time
  and a1.msisdn=b8.msisdn(+)
  and a1.Sum_Month=b8.sum_month(+)
 
  and b6.dim_code(+)=200023  
 and (to_date('20051020','yyyymmdd')-(case nvl(to_char(b8.recall_time),'0') when '0' then to_date(to_char(b8.first_call_time,'YYYYMMDD'),'YYYYMMDD')
      else trunc(b8.recall_time,'dd') end))>=b6.min_value(+)
  and (to_date('20051020','YYYYMMDD')-(case nvl(to_char(b8.recall_time),'0') when '0' then to_date(to_char(b8.first_call_time,'YYYYMMDD'),'YYYYMMDD')
      else trunc(b8.recall_time,'DD') end))< b6.max_value(+)
 and b6.dim_code(+)<1063
 
  and  bb6.dim_code(+)=200023
 
 and months_between(to_date('200510','YYYYMM'),
  (case nvl(to_char(b8.recall_time),'0') when '0' then to_date(to_char(b8.first_call_time,'YYYYMM'),'YYYYMM')
      else trunc(b8.recall_time,'dd') end))>=bb6.min_value(+)
 and months_between(to_date('200510','YYYYMM'),
  (case nvl(to_char(b8.recall_time),'0') when '0' then to_date(to_char(b8.first_call_time,'YYYYMM'),'YYYYMM')
      else trunc(b8.recall_time,'dd') end))<bb6.max_value(+)
          
 and bb6.dim_code(+)>=1063
 --如果recall_time是空的话就取first_call_time,否则取recall_time
 
 and b7.dim_code(+)=200011  --变化幅度
 and ( (  nvl(a1.Sms_Acall_Cnt,0) +nvl(a1.Sms_Pcall_Cnt ,0)
               -nvl(a2.Sms_Acall_Cnt,0)-nvl(a2.Sms_Pcall_Cnt,0))
            /(nvl(a2.Sms_Acall_Cnt,0) +nvl(a2.Sms_Pcall_Cnt,0)+0.00000001))*100
        between b7.min_value and b7.max_value-1
          --加上0.00000001 用于处理除零
         

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值