[亿信BI4.7] if判断与ardb计算问题

1720
6

yks999 小试身手Lv3

发表于2023-1-5 12:59

悬赏10

已解决

楼主
现在有一个if判断的过滤条件,条件为真则会走一个ardb函数的数据库查询sql例子:if(@num=1,aa.id in <#=ardb(select id from tableB where code = '"+@code+"')#>,aa.id = @code)
条件为假的情况下该ardb数据库查询sql查询的结果为空
现在if判断为假,但是计算时会出现java的arrayIndexOutOfBoundsException错误,是因为计算了ardb的缘故,我想有没有方法在判断为假的时候不计算ardb,或者有什么其他解决方法?

最近看过此主题的会员

esen_4Y3L5ADO80

ssssssss

陈平安

salmons001

最佳答案
我刚试了下,确实if就算判断为假也会执行这个sql,有一种方法可以试一下,就是用分支,比如我主分支的过滤条件直接就是aa.id in <#=ardb(select id from tableB where code = '"+@code+"')#>,子分支是aa.id = @code,把判断写在分支表达式里,如果为真进入主分支,为假进入子分支,这样为假的时候就不会执行这个ardb了
6个回答

只看楼主

Bryce 小试身手Lv3

发表于2023-1-5 14:37

只看该作者

取消 关注该作者的回复

沙发

本帖最后由 Bryce 于 2023-1-5 14:39 编辑

arbd写在外面,把这个过滤条件去掉,比如就用个文本测试的时候,条件不符合的话会报这个错误吗

yks999 小试身手Lv3

发表于2023-1-5 15:36

只看该作者

取消 关注该作者的回复

板凳

Bryce 发表于 2023-1-5 14:37
arbd写在外面,把这个过滤条件去掉,比如就用个文本测试的时候,条件不符合的话会报这个错误吗 ...

对,if为假的时候,它也会计算if为真里面的ardb的数据库sql,然后报错

yks999 小试身手Lv3

发表于2023-1-5 15:48

只看该作者

取消 关注该作者的回复

地板

上传一下具体使用的公式,请大家看一下怎么改


Bryce 小试身手Lv3

发表于2023-1-5 12:59

只看该作者

取消 关注该作者的回复

5#

我刚试了下,确实if就算判断为假也会执行这个sql,有一种方法可以试一下,就是用分支,比如我主分支的过滤条件直接就是aa.id in <#=ardb(select id from tableB where code = '"+@code+"')#>,子分支是aa.id = @code,把判断写在分支表达式里,如果为真进入主分支,为假进入子分支,这样为假的时候就不会执行这个ardb了

yks999 小试身手Lv3

发表于2023-1-5 16:29

只看该作者

取消 关注该作者的回复

6#

Bryce 发表于 2023-1-5 15:59
我刚试了下,确实if就算判断为假也会执行这个sql,有一种方法可以试一下,就是用分支,比如我主分支的过滤 ...

这个方法也可以,我的这个查询是全辖的查询,忘记加这个库它自己了,加了它自己就不是空值,也就解决了,但是还是需要亿信这边看看能不能把这个问题解决了,毕竟if判断也不需要两边都计算的是吧

Bryce 小试身手Lv3

发表于2023-1-5 16:51

只看该作者

取消 关注该作者的回复

7#

yks999 发表于 2023-1-5 16:29
这个方法也可以,我的这个查询是全辖的查询,忘记加这个库它自己了,加了它自己就不是空值,也就解决了,但是 ...

这个应该是正常的现象,因为语句首先要编译成功,才能运行,您编译都失败的话,计算肯定会出错的,就好比我写代码的时候在if语句第一个条件随便写几个字母,是肯定不能运行的,即使没有走这条分支

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号