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

目录:

1. 概述编辑

1.1 版本

报表服务器版本
功能变更
11.0--

1.2 问题描述

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

222

1.3 解决思路

为解决该问题,在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}'

如下图所示:

15.png

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

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

1600603807217293.png

2.3 配置分隔符

将分隔符设置为'or 订单id='

14.png

2.4 预览效果

保存模板,点击「分页预览」,效果如下图所示:

16.png


3. 注意事项编辑

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

则以管理员身份进入数据决策系统,点击「管理系统>安全管理>SQL防注入」,在已选择的关键字中点击\b(?i)or\b字段,变为未选择的关键字。如下图所示:

17.png

4. 已完成模板编辑

已完成模板,可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Parameter\MultiValue\Oracle多值查询参数个数限制示例.cpt

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