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 值。
2.3 配置分隔符
将分隔符设置为 or id=,勾选下面的返回字符串。
注:or 的前面有空格。
2.4 预览效果
预览页面,点击查询,成功返回数据。
3. 注意事项编辑
3.1 注意一
若参数是字符串类型,则 SQL 写成 select * from table where id='${id}',分隔符设置成' or id='
3.2 注意二
若出现:因使用了禁用的特殊关键字,怀疑进行了 SQL 攻击注入攻击,有特殊需要联系系统管理员。
则点击服务器-报表平台管理-报表管理平台-管理系统-安全管理-SQL防注入-编辑将\b(?i)or\b移除即可。
4. 已完成模板编辑
已完成模板,可参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameter\MultiValue\参数多值查询.cpt。
点击下载模板:Oracle多汁查询参数个数限制示例.cpt