关于ORACLE 语句中,IN 超过1000个的解决方法

在ORACLE SELECT 语句中 IN 的数据如果超过 1000,就会出错,解决方法也很简单,以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;
                
            
forint 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,60or t.A in (61,62)

 这样就解决了 IN大于1000的问题。

 

posted @ 2008-07-21 16:21  不羁  阅读(9562)  评论(1编辑  收藏  举报