您的位置:程序门 -> db2 -> 基础类



db2存储过程中 动态sql的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


db2存储过程中 动态sql的问题
发表于:2007-06-18 10:13:44 楼主
存储过程如下:
create   procedure   istaudit.p60_imp_e_systemcal
  (in   strgranularity   varchar(1),  
    in   strstatisticdate   varchar(10),  
    in   fieldkey   varchar(30),  
    in   inof1   varchar(3000),  
    in   inof2   varchar(3000),  
    in   inof3   varchar(1000),  
    in   currname   varchar(30),  
    in   inof4   varchar(3000)
  )  
  begin  
    declare   insertsql   varchar(4000);
          if   currname   =   'cny '   then    
set   insertsql= 'insert   into   t41_systemcal_upday(organkey   ,   currkey,   itemkey   ,   datarange     ,   granularity   ,row_num   ,   col_num   ,   statisticdate,calvalue   )   '  
      ¦ ¦ '   select   organkey, ' ¦ ¦   '01 '   ¦ ¦ ', ' ¦ ¦   fieldkey   ¦ ¦ ', ' ¦ ¦   '1 '   ¦ ¦ ', ' ¦ ¦   strgranularity ¦ ¦ ', ' ¦ ¦   '1 ' ¦ ¦ ', ' ¦ ¦   '1 ' ¦ ¦ ', ' ¦ ¦   'timestamp_iso( ' ¦ ¦   strstatisticdate   ¦ ¦ ') ' ¦ ¦ ', ' ¦ ¦   'sum(amt_val)/10000 '
      ¦ ¦   '   from   s01_loan_mid   s1   where   s1.currkey= ' ¦ ¦   'cny '   ¦ ¦     inof1   ¦ ¦   inof2   ¦ ¦inof3   ¦ ¦inof4 ¦ ¦ '   group   by   organkey   ';
else    
              set   insertsql= 'insert   into   t41_systemcal_upday(organkey   ,   currkey,   itemkey   ,   datarange     ,   granularity   ,row_num   ,   col_num   ,   statisticdate,calvalue   )   '  
      ¦ ¦ '   select   organkey, ' ¦ ¦   '97 '   ¦ ¦ ', ' ¦ ¦   fieldkey   ¦ ¦ ', ' ¦ ¦   '1 '   ¦ ¦ ', ' ¦ ¦   strgranularity ¦ ¦ ', ' ¦ ¦   '1 ' ¦ ¦ ', ' ¦ ¦   '1 ' ¦ ¦ ', ' ¦ ¦   'timestamp_iso( ' ¦ ¦   strstatisticdate   ¦ ¦ ') ' ¦ ¦ ', ' ¦ ¦   'sum(amt_val*s2.smcaexrt/100)/10000 '
      ¦ ¦   '   from   s01_loan_mid   s1,xdzx1.t00_affmsmbd   s2   where   1=1   and   s1.currkey <> ' ¦ ¦ 'cny ' ¦ ¦ '   and   s1.currkey=s2.smcaccyc   and   s1.organkey=s2.sicabrno   and   s2.smcars1b= ' ' '   ¦ ¦     inof1 ¦ ¦   inof2   ¦ ¦inof3   ¦ ¦inof4 ¦ ¦   'group   by   organkey ';
  end   if;    
          prepare   s1   from   insertsql;
          EXECute   s1;
end;
然后我调的时候,把每个参数都传入,系统报传入的参数currname在上下文中无效.
问问大家,上面的insertsql如何才能执行?
发表于:2007-06-20 01:06:301楼 得分:0
lz的代码看起来太吃力了,而且有错,简化吧。
(1).... ' ¦ ¦   '01 '   ¦ ¦ '...                 改为:     .... ' '01 ' '....
(2)...., ' ¦ ¦   fieldkey   ¦ ¦ ',....   改为:     ..., ' ' ' ¦ ¦fieldkey   ¦ ¦ ' ' ',...
类推。

解释:
¦ ¦只起连接作用,而两个 ' '表示一个'符号(另一起转义作用)。
例如lz的部分语句写为,个人觉得这样会清晰许多:
set   insertsql= 'insert   into   t41_systemcal_upday(organkey   ,   currkey,   itemkey   ,   datarange     ,   granularity   ,row_num   ,   col_num   ,   statisticdate,calvalue   )   '  
      ¦ ¦ '   select   organkey, ' '01 ' ', ' ' ' ¦ ¦   fieldkey   ¦ ¦ ' ' ', ' '1 ' '   , ' ' ' ¦ ¦   strgranularity ¦ ¦ ' ' ', ' '1 ' ', ' '1 ' ',timestamp_iso( ' ' ' ¦ ¦strstatisticdate ¦ ¦ ' ' '),sum(amt_val)/10000 '
      ¦ ¦   '   from   s01_loan_mid   s1     .......(后面省)

lz修改为后,希望通过。
发表于:2007-06-26 19:41:272楼 得分:0
谢谢fengxiarong707的建议,:)
发表于:2007-06-28 11:26:123楼 得分:0
哎,这玩意儿我写得太多了;
说白了,就是字符串连接。
发表于:2007-07-02 15:28:044楼 得分:0
该回复于2007-12-29 16:26:41被管理员或版主删除


快速检索

最新资讯
热门点击