`
zhangjim
  • 浏览: 52704 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle数据库中IN参数个数超过1000的问题

阅读更多

业务问题:

 在oracle中,我们使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出“java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000”这个异常。

 

解决方案:

这个问题的思想是把参数列表分段,将SQL语句拼成如下形式:

select * from spp_info where keyword in (a,b,c) union select * from spp_info where keyword in (d,e,f)

public class Test {
	public static void main(String[] args) {
		String sql = "select * from spp_info where keyword";
		String keyword = "a,b,c,d,e,f";
		int splitNum = 3;
		System.out.println(setWhereInArray(sql, keyword, splitNum));
	}

	/**
	 * More than 1000 divided into multiple sql queries
	 * 
	 * @param orgSql
	 * @param paramValue
	 * @param splitNum query number
	 * @return sql
	 */
	public static String setWhereInArray(String orgSql, String paramValue, int splitNum) {
		String paramArray[] = paramValue.split(",");
		int inArrayNum = paramArray.length % splitNum == 0 ? paramArray.length / splitNum : paramArray.length / splitNum + 1;

		int m = 0;
		int b = 0;
		int n = splitNum;
		String p[] = new String[inArrayNum];
		String sql[] = new String[inArrayNum];

		for (int k = 0; k < paramArray.length; k++) {
			if (b < inArrayNum) {
				p[b] = "";
				for (; m < n; m++) {
					if (m >= paramArray.length) {
						break;
					}
					p[b] += paramArray[m] + ",";
				}
				p[b] = p[b].substring(0, p[b].lastIndexOf(","));
				sql[b] = orgSql + " in (" + p[b] + ")";
				b++;
				n += splitNum;
			}
		}
		String newSql = "";
		for (int q = 0; q < sql.length; q++) {
			newSql += sql[q] + " union ";
		}
		newSql = newSql.substring(0, newSql.lastIndexOf(" union "));
		return newSql;
	}
}

 

 

2
1
分享到:
评论
5 楼 zhangjim 2013-11-09  
没办法啊,in里面的关键词是随机个数的
4 楼 logqq 2013-11-05  
LZ 霸气啊 。。IN 后面的参数能用到这么多?
3 楼 houyujiangjun 2013-11-04  
也就是oracle 让你这么瞎搞,你用用mysql,百万计,十个以上的in 不跑个几分钟出来才怪。。。。
2 楼 icefishc 2013-11-04  
这么多东西你就不该用in了
1 楼 capp0139 2013-11-04  
截取1000个in 条件中间用 or 就行了,不需要union

相关推荐

    Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    在Oracle数据库中,排序操作是数据库查询中非常关键的一部分,特别是在数据分析、报表生成以及用户界面展示时。本文将深入探讨`ORDER BY`子句在Oracle中的排序机制,以及查询时根据`IN`条件顺序输出的方法。 首先,...

    [数据库]处理 Oracle SQL in 超过1000 的解决方案.txt

    在Oracle数据库中,当我们需要使用SQL的IN子句来匹配一个包含超过1000个值的列表时,会遇到一个问题:Oracle默认限制了IN子句中的元素数量不能超过1000个。这主要是为了防止SQL语句变得过于复杂以及提高执行效率。...

    Oracle数据库常见维护问题手册-精典

    ### Oracle数据库常见维护问题手册-精典 #### 数据库基础 **数据库启动方式** Oracle数据库启动通常通过`SQL*Plus`工具来进行。首先确保已经安装并配置了正确的Oracle客户端环境,然后通过以下命令来启动数据库:...

    Excel通过VBA连接Oracle数据库

    在Excel中通过Visual Basic for Applications (VBA) 连接Oracle数据库是一种强大的自动化工具,能够让你轻松地从大型数据库中提取、处理和分析数据。VBA是Excel内置的编程环境,允许用户创建自定义功能和宏,以实现...

    C#中oracle数据库的操作方法汇总

    在C#中与Oracle数据库进行交互是常见的任务,本文将详细介绍两种主要的连接方式、事务处理、命令参数的创建以及如何使用数据集显示查询结果。这些知识点对于开发C#应用程序并需要与Oracle数据库进行交互的开发者来说...

    oracle数据库参考手册

    `Ora9iSQLRef.chm`这个文件很可能是Oracle 9i版本的SQL参考指南,包含了9i版本中的SQL语法和特性,对于了解和掌握该版本的Oracle数据库非常有帮助。随着Oracle版本的升级,新的特性和功能会不断加入,但基础概念和...

    oracle数据库操作常见错误以及解决方案

    Oracle数据库在运行过程中可能会遇到各种错误,这些错误可能会影响到数据库的正常运作。本文将详细讨论三个常见的Oracle数据库操作错误及其解决方案。 首先,错误`ORA-01650: unable to extend rollback segment ...

    Oracle 数据库系统作业

    以上是关于Oracle数据库系统作业的知识点详解,覆盖了数据库的物理和逻辑存储结构、日志机制、管理参数设置、启动关闭过程、SQL*PLUS命令、SQL查询基础以及PL/SQL编程等内容。希望这些知识点能够帮助读者更好地理解...

    数据上传Oracle数据库

    在VB中,我们可以使用Oracle提供的ODBC(Open Database Connectivity)驱动或者更现代的OLE DB或.NET的Oracle Data Provider for .NET(ODP.NET)来连接到Oracle数据库。这些驱动允许VB应用程序与数据库进行通信,...

    LoadRunner数据库连接及参数设置(oracle)

    【LoadRunner数据库连接及参数设置(Oracle)】 在性能测试中,LoadRunner是一个强大的工具,它允许...在Oracle数据库的环境中,理解如何建立连接、执行SQL查询以及参数化数据对于确保测试的有效性和准确性至关重要。

    Oracle数据库编程调优手册

    Oracle数据库编程调优手册是一本针对数据库开发者和管理员的重要参考资料,旨在帮助他们提升Oracle数据库的性能和效率。手册涵盖了多个关键领域,包括数据加载优化、UPDATE语句的优化、DELETE操作的改进、DBA级别的...

    asp链接oracle数据库实例

    本项目中,`inc\inc.asp` 文件是关键,它可能包含了连接Oracle数据库的代码和相关函数。 在ASP中连接Oracle数据库,首先需要安装Oracle的数据提供者,如ODBC(Open Database Connectivity)或OLE DB提供者。然后在...

    oracle数据库教学ppt

    在Oracle数据库教学中,了解和掌握SQL语言是至关重要的。SQL,全称为Structured Query Language,即结构化查询语言,它是用于管理和处理关系数据库的标准语言,集数据定义、数据查询、数据更新和数据控制四大功能于...

    Oracle数据库教程.txt

    ### Oracle数据库教程知识点详解 #### 一、Oracle数据库概述 - **定义与特点**: - Oracle数据库是由美国Oracle公司开发的一款关系型数据库管理系统。它以其高性能、高可靠性及强大的功能在众多数据库产品中...

    oracle数据库考试复习题

    Oracle数据库是一种广泛使用的大型关系型数据库管理系统,对于准备Oracle数据库考试的学生来说,掌握其核心概念和操作是至关重要的。以下是一些关键知识点的详细解释: 1. **逻辑运算符**:在SQL查询中,`AND`用于...

    vc++oracle数据库连接源代码

    首先,让我们了解如何在VC++中建立Oracle数据库的连接。这通常通过ODBC(Open Database Connectivity)或者OCI(Oracle Call Interface)来实现。ODBC是微软提供的一个标准接口,允许应用程序访问各种数据库,包括...

    oracle数据库参数

    Oracle数据库参数是数据库管理...以上只是部分Oracle数据库参数的解释,实际应用中还有许多其他参数,它们共同决定了Oracle数据库的运行方式和性能表现。理解和熟练使用这些参数对于数据库性能调优和问题排查至关重要。

    c#登陆界面与Oracle数据库连接

    在IT领域,尤其是在软件开发与数据库管理中,C#与Oracle数据库的结合是十分常见的应用场景。本文将深入探讨“C#登陆界面与Oracle数据库连接”的关键知识点,包括如何设计一个安全有效的登录界面、如何利用存储过程...

Global site tag (gtag.js) - Google Analytics