历史版本6 :Oracle多值查询参数个数限制 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题描述

在使用 Oracle 数据查看,若使用 in 过滤,当参数大于1000 个时会出现报错。具体的报错信息是:错误代码:1301 数据集配置错误 Query:ORA-01795: 列表中的最大表达式数为 1000,如下图:

222

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}'

如下图所示:

企业微信截图_16006037453453.png


2.2 配置下拉复选框数据字典

根据项目实际情况配置数据字典,我这里使用的是公式自动生成的 1 到 1001 的 ID 值。

1600603807217293.png


2.3 配置分隔符

将分隔符设置为 or id=,勾选下面的返回字符串。

注:or 的前面有空格。

222


2.4 预览效果

预览页面,点击查询,成功返回数据。

222

3. 注意事项编辑

3.1 注意一

若参数是字符串类型,则 SQL 写成 select * from table where id='${id}',分隔符设置成' or id='

222

3.2 注意二

若出现:因使用了禁用的特殊关键字,怀疑进行了 SQL 攻击注入攻击,有特殊需要联系系统管理员

则点击服务器-报表平台管理-报表管理平台-管理系统-安全管理-SQL防注入-编辑\b(?i)or\b移除即可。

image.png

4. 已完成模板编辑

已完成模板,可参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Parameter\MultiValue\参数多值查询.cpt。

点击下载模板:Oracle多汁查询参数个数限制示例.cpt