有大佬知道为什么这个地方会报数字无效的错误嘛?在帆软报表软件上测试是正常的,但是在TOMCAT失败了
select T4.TDDOC,
       T4.tddsc1,
       t4.tddsc2,
       t4.tddsc,
       t4.uorg,
       t4.tuprc,
       t4.taexp,
       t4.THDC5801,
       t4.tddoco,
       t4.thflag,
       t4.tdtxa1,
       t4.tdflag,
       t4.THSTRING01,
       t2.tdtxa2,
       t3.mcu,
       trim(c.abalph) as abalph,
       t4.thalph
  from (select trim(t1.tddoc) as tddoc,
               trim(t1.tddsc1) AS tddsc1,
               trim(t1.tddsc2) as tddsc2,
               trim(t1.tddsc) as tddsc,
               T1.TDUORG / 10000 as uorg,
               T1.TDTUPRC / 10000 as tuprc,
               T1.TDTAEXP / 100 as taexp,
               trim(T.THDC5801) as THDC5801,
               t1.tddoco,
               t.thflag,
               t1.tdtxa1,
               trim(t.thalph) as thalph,
               t1.tdflag,
               T.THSTRING01
          from proddta.f5842001  t
          left join proddta.f5842002 t1
            on t.thdoc = t1.tddoc
            where  1=1 ${if(len(单据号)==0,"","and t.tHdoc='"+单据号+"'")}
            and 1=1  ${if(len(单据号上)==0,"","and t.tHdoc>'"+单据号上+"'")}
            and 1=1 ${if(len(单据号下)==0,"","and t.tHdoc<'"+单据号下+"'")}
            and t1.tdchar01 <> 'N'
            ) t4
  left join (select tddoc,
                    listagg(to_char(tdtxa1), ' ') WITHIN GROUP(ORDER BY tdtxa1) AS tdtxa2
               from (select distinct tddoc, concat(SUBSTR(trIM(tdtxa1), 2, 2), '%') as tdtxa1
                       from proddta.f5842002)
              group by tddoc) t2
    on t4.tddoc = t2.tddoc
  left join (select tddoc,listagg(to_char(tdmcu), ' ') WITHIN GROUP(ORDER BY tdmcu) AS mcu
               from (select distinct tddoc, trIM(tdmcu) as tdmcu
                       from proddta.f5842002)
              group by tddoc) t3
    on t4.tddoc = t3.tddoc
  left join sy920.f0092 b
    on T4.thstring01= b.uluser
  left join proddta.f0101 c
    on b.ulan8 = c.aban8
 order by t4.tddoc, t4.tdtxa1
FineReport 刘周磊 发布于 2020-1-10 14:47 (编辑于 2020-1-10 15:22)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
JackloveLv7高级互助
发布于2020-1-10 14:56(编辑于 2020-1-10 15:21)
where 1=1
${if(len(单据号) == 0,"","and t.tHdoc*1 = ('" + 单据号 + "')")}
${if(len(单据号上) == 0,"","and t.tHdoc*1 < ('" + 单据号上 + "')")}
${if(len(单据号下) == 0,"","and t.tHdoc*1 >('" + 单据号下 + "')")}


  • 刘周磊 刘周磊(提问者) 去掉1=1 报缺失表达式。
    2020-01-10 15:00 
  • Jacklove Jacklove 回复 刘周磊(提问者) 这个上面有没有where 条件语句 如果有的话不用加1=1 如果没有where条件语句的话要写 where 1=1 不是and 1=1
    2020-01-10 15:01 
  • Jacklove Jacklove 回复 刘周磊(提问者) 这句语句附近的这段sql语句截图一下上传看看
    2020-01-10 15:02 
  • 刘周磊 刘周磊(提问者) 完整的语句在题目中,麻烦看一下。
    2020-01-10 15:12 
  • Jacklove Jacklove 回复 刘周磊(提问者) t.tHdoc你的这个字段是存数字么 有么有其他数字一位的类型
    2020-01-10 15:13 
最佳回答
0
603594138Lv6初级互助
发布于2020-1-10 15:00(编辑于 2020-1-10 15:02)

where 1=1 

          ${if(len(单据号)==0,"","and to_number(T.tHdoc)='"+单据号+"'")}

          ${if(len(单据号上)==0,"","and to_number(t.tHdo)>'"+单据号上+"'")}
          ${if(len(单据号下)==0,"","and to_number(t.tHdoc)<'"+单据号下+"'")}

试一下行不行

  • 刘周磊 刘周磊(提问者) and 1=1去掉的确不影响逻辑的使用,但是在服务器上报错: 错误代码:1301 数据集配置错误Query:ORA-01722: invalid number
    2020-01-10 15:15 
最佳回答
0
shirokoLv6资深互助
发布于2020-1-10 15:03(编辑于 2020-1-10 15:08)

你的单据号不是纯数字字符串吧

image.png

to_number函数中的值,非数字的,比如,to_number('1.5天')是错误的,to_number('100')是正常的

  • 刘周磊 刘周磊(提问者) 是纯数字的 doc的类型是number
    2020-01-10 15:13 
  • shiroko shiroko 回复 刘周磊(提问者) 你再看看。。3个参数都要是纯数字的,不能有小数点等字符之外的其他字符,中间也不能有空格,也不能是单空格字符只能是空字符串
    2020-01-10 15:48 
最佳回答
0
牛~~~Lv6中级互助
发布于2020-1-10 15:03

后面的  and 1=1 都没啥问题。主要是第一个,衔接在where后面的直接写 1=1

where 
1=1 ${if(len(单据号)==0,"","and T.tHdoc=to_number('"+单据号+"')")}
and 1=1 ${if(len(单据号上)==0,"","and t.tHdoc>to_number('"+单据号上+"')")}
and 1=1 ${if(len(单据号下)==0,"","and t.tHdoc<to_number('"+单据号下+"')")}


最佳回答
0
13207222709Lv6高级互助
发布于2020-1-10 15:06

光看这三句SQL没啥大问题,and 1=1有点多余,把完整SQL放上来看一下

  • 刘周磊 刘周磊(提问者) 完整sql我发在了问题中。
    2020-01-10 15:13 
  • 13207222709 13207222709 回复 刘周磊(提问者) 如果thdoc是纯数字的话 传的那个单据号,单据号上,单据号下是不是什么类型的呢? 建议你可以单独把第一个子查询的SQL单独拿出来新建一个数据集中,手动输入参数测试一下
    2020-01-10 15:26 
  • 刘周磊 刘周磊(提问者) 回复 13207222709 我试过了不行的,这个传参是控件传参,是从输入框输入数字,然后传过来的。
    2020-01-10 15:29 
  • 13207222709 13207222709 回复 刘周磊(提问者) select trim(t1.tddoc) as tddoc, trim(t1.tddsc1) AS tddsc1, trim(t1.tddsc2) as tddsc2, trim(t1.tddsc) as tddsc, T1.TDUORG / 10000 as uorg, T1.TDTUPRC / 10000 as tuprc, T1.TDTAEXP / 100 as taexp, trim(T.THDC5801) as THDC5801, t1.tddoco, t.thflag, t1.tdtxa1, trim(t.thalph) as thalph, t1.tdflag, T.THSTRING01 from proddta.f5842001 t left join proddta.f5842002 t1 on t.thdoc = t1.tddoc where 1=1 ${if(len(单据号)==0,\"\",\"and t.tHdoc=\'\"+单据号+\"\'\")} and 1=1 ${if(len(单据号上)==0,\"\",\"and t.tHdoc>\'\"+单据号上+\"\'\")} and 1=1 ${if(len(单据号下)==0,\"\",\"and t.tHdoc<\'\"+单据号下+\"\'\")} and t1.tdchar01 <> \'N\' 单独把这个SQL新建一个数据集,然后预览数据集手动输入单据号、单据号上、单据号下
    2020-01-10 15:32 
  • 刘周磊 刘周磊(提问者) 回复 13207222709 单独使用的话,可以正常用。
    2020-01-10 15:40 
  • 6关注人数
  • 693浏览人数
  • 最后回答于:2020-1-10 15:22
    请选择关闭问题的原因
    确定 取消
    返回顶部