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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...