在SQL查询中插入一串数字时遇到问题
SELECT * FROM tablename a WHERE a.flokkurid IN (3857,3858,3863,3285) ORDER BY sjodategund,rodun
…要么:
SELECT * FROM tablename a WHERE a.flokkurid IN (:strManyNumbers) ORDER BY sjodategund,rodun
…使用此代码:
using (OracleCommand sel = new OracleCommand(sql,connectionstring)) { sel.Parameters.Add(":strManyNumbers",OracleDbType.Varchar2,"Client",ParameterDirection.Input); }
所以,如果我运行此查询,我得到:
ora-01722: invalid number
解决方法
要传递一组值,您需要使用Oracle的表或数组类型.
首先,您创建一个表类型(例如,对于NUMBER):
CREATE TYPE number_table AS TABLE OF NUMBER;
OracleParameter param1 = new OracleParameter(); param1.OracleDbType = OracleDbType.Int32; param1.CollectionType = OracleCollectionType.PLsqlAssociativeArray;
然后分配一些值:
param1 = new int[] { 3857,3285 };
SELECT * FROM tablename a where a.flokkurid in (TABLE(CAST(:manyNumbers AS number_table))) order by sjodategund,rodun