微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 在SELECT IN中使用Oracle参数的问题

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

但如果我只插入一个数字,即“3857”,它将返回带数据的查询OK.

解决方法

要传递一组值,您需要使用Oracle的表或数组类型.

首先,您创建一个表类型(例如,对于NUMBER):

CREATE TYPE number_table AS TABLE OF NUMBER;

查询创建参数时,将其声明为关联的PL / sql数组:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐