加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:44:17 所属栏目:百科 来源:网络整理
导读:在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 …使用此
在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读