gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:45:09 25 4
gpt4 key购买 nike

在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, 3858, 3863, 3285 }; 

并且您的查询需要转换:

SELECT * FROM tablename a 
where a.flokkurid in (TABLE(CAST(:manyNumbers AS number_table)))
order by sjodategund, rodun

关于c# - 在 SELECT IN 中使用 Oracle 参数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6155146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com