作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用绑定(bind)变量时没有获取值
eg,, SELECT * FROM EMP WHERE USER IN (:VALUES)
如果我使用上面的查询,它不会执行
直接传递值
SELECT * FROM EMP WHERE USER IN (+ arraylist +)
工作正常
========================================
这是示例代码
string[] Myarray = ListVal.split(','); Query = "SELECT * FROM EMP WHERE USER IN (:VALUES)"
OracleParameter Param = { new OracleParameter (":VALUES",OracleDBType.Array)
};
Param[0].value = Myarray;
using(dr = OracleFactory.ExecuteReader(CommandType.Text,Query,true,Param)) {
}
在执行这个时我得到了一个异常
无效的参数绑定(bind) ParameterName VALUES
最佳答案
您需要将值作为数组传递并稍微修改查询。以下代码适用于 ODP.NET。我不知道是否也可以使用 Microsoft 已弃用的 Oracle 驱动程序来完成。
首先,您需要定义一个表类型(例如VARCHAR):
CREATE TYPE varchar_table AS TABLE OF VARCHAR2(2000);
当您为查询创建参数时,将其声明为关联 PL/SQL 数组:
OracleParameter param1 = new OracleParameter();
param1.OracleDbType = OracleDbType.Varchar2;
param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
然后分配一些值:
param1 = new string[2] { "johnp", "billt" };
并且您的查询需要转换:
SELECT * FROM EMP WHERE USER IN (TABLE(CAST(:values AS varchar_table)))
关于c# - IN 查询的绑定(bind)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5989482/
我是一名优秀的程序员,十分优秀!