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

在ORACLE SELECT 语句中 IN 的数据如果超过 1000,就会出错,解决方法也很简单,以C#代码为例:

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

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

参数2:需要IN的列名;

public   string  GetSqlIn(  string  sqlParam,  string  columnName )
ExpandedBlockStart.gifContractedBlock.gif        
{
            
int width = sqlParam.IndexOf( "'"1 ) - 1;
            
string temp = string.Empty;
                
            
forint i = 0; i < sqlParam.Length; i += 1000 * ( width + 3 ) )
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
if( i + 1000 * ( width + 3 ) - 1 < sqlParam.Length )
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    temp 
= temp + sqlParam.Substring( i, 1000 * ( width + 3 ) - 1 )
                        
+ ") OR " + columnName + " IN (";
                }

                
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    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  )
ExpandedBlockStart.gifContractedBlock.gif
{
    
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的问题。

 

转载于:https://www.cnblogs.com/ttc/archive/2008/07/21/1247790.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值