1. 概述
1.1 问题描述
在使用 Oracle 数据查看,若使用 in 过滤,当参数大于1000 个时会出现报错。具体的报错信息是:错误代码:1301 数据集配置错误 Query:ORA-01795: 列表中的最大表达式数为 1000,如下图所示:
1.2 解决思路
为解决该问题,在Oracle 查询语句中,可以使用 or 关键字替换 in 关键字实现同样的功能。如:
select * from S订单明细 where 订单id in ('10001','10002','10003','10004')
可以被改写成:
select * from S订单明细 where 订单id ='10001' or 订单id ='10002' or 订单id='10003' or 订单id='10004'
2. 操作步骤
2.1 编写查询 SQL
新建普通报表,编写查询语句 SQL,sql中直接使用“=”号,不使用关键字in。
select * from S订单明细 where 订单id='${id}'
如下图所示:
2.2 配置下拉复选框数据字典
根据项目实际情况配置数据字典,我这里使用的是公式自动生成的 1 到 1001 的 ID 值。公式为:range(10001,11113)
2.3 配置分隔符
将分隔符设置为'or 订单id='
2.4 预览效果
保存模板,点击「分页预览」,效果如下图所示:
3. 注意事项
若出现:因使用了禁用的特殊关键字,怀疑进行了 SQL 攻击注入攻击,有特殊需要联系系统管理员。
则以管理员身份进入数据决策系统,点击「管理系统>安全管理>SQL防注入」,在已选择的关键字中点击\b(?i)or\b字段,变为未选择的关键字。如下图所示:
4. 已完成模板
已完成模板,可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\MultiValue\Oracle多值查询参数个数限制示例.cpt
点击下载模板:Oracle多值查询参数个数限制示例.cpt