oracle中列表中的最大表达式数为 1000

是只有Oracle才有这个限制吗?及常用的几种解决办法... 是只有Oracle才有这个限制吗?及常用的几种解决办法 展开
 我来答
超尘离梦
2010-03-29 · TA获得超过1477个赞
知道小有建树答主
回答量:360
采纳率:0%
帮助的人:257万
展开全部
是Oracle的限制,解决的方法有很多。

比如下面的C#的代码

1、先写一个方法,接收2个参数

参数1:接收 IN里面的数据,如:'a1','a2',...'a2000' ;

参数2:需要IN的列名;

public string GetSqlIn( string sqlParam, string columnName )
{
int width = sqlParam.IndexOf( "'", 1 ) - 1;
string temp = string.Empty;

for( int i = 0; i < sqlParam.Length; i += 1000 * ( width + 3 ) )
{
if( i + 1000 * ( width + 3 ) - 1 < sqlParam.Length )
{
temp = temp + sqlParam.Substring( i, 1000 * ( width + 3 ) - 1 )
+ ") OR " + columnName + " IN (";
}
else
{
temp = temp + sqlParam.Substring( i, sqlParam.Length - i );
}
}

return temp;
}

2、使用这个方法的返回值,代码如下:

System.Text.StringBuilder sql = new System.Text.StringBuilder("");
sql.Append ( " SELECT " );
sql.Append ( " T.A" );
sql.Append ( " FROM TEST T" );
sql.Append ( " WHERE 1=1 " );

if( Col.Length > 0 )
{
string sqlStr = GetSqlIn( Col, "ColName" );
sql.Append ( " AND T.Col IN ( " + sqlStr + " )" );
}
sql.Append ( " ORDER BY T.A" );

3、运行后得到的SQL字符串格式为:

select t.* from TEST t where t.A in (59,60) or t.A in (61,62)

这样就解决了 IN大于1000的问题。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nehnre
2012-10-30
知道答主
回答量:13
采纳率:0%
帮助的人:7.7万
展开全部
如果有10几万的数据怎么办?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式