sql - Oracle "ORA-01008: not all variables bound"错误带参数

标签 sql oracle plsql oracle10g

这是我第一次与 Oracle 打交道,我很难理解为什么会收到此错误。

我在查询的 where 子句中使用带有 C# 的 Oracle ODT.NET 和以下代码:

WHERE table.Variable1 = :VarA
  AND (:VarB IS NULL OR table.Variable2 LIKE '%' || :VarB || '%')
  AND (:VarC IS NULL OR table.Variable3 LIKE :VarC || '%')

我正在添加参数值,如下所示:
cmd.Parameters.Add("VarA", "24");
cmd.Parameters.Add("VarB", "test");
cmd.Parameters.Add("VarC", "1234");

当我运行这个查询时,服务器返回:
ORA-01008: not all variables bound 

如果我注释掉任一'AND (....' 行,则查询成功完成。

如果我只使用两个参数而不是三个参数进行查询,为什么查询会正常运行?我收到的错误甚至没有意义

最佳答案

oracle 的 ODP.Net 提供程序默认使用按位置绑定(bind)。将行为更改为按名称绑定(bind)。设置属性BindByName为真。比你可以忽略参数的双重定义。

using(OracleCommand cmd = con.CreateCommand()) {
    ...
    cmd.BindByName = true;
    ...
}

关于sql - Oracle "ORA-01008: not all variables bound"错误带参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1422032/

相关文章:

java - 为什么我的查询性能急剧下降?

sql - 具有多列输出的postgresql函数

mysql - SQL不同的连接和WHERE子句可能会出错

sql - 在 Oracle 中减去日期 - 数字还是间隔数据类型?

sql - 循环更新数据库记录?

c# - SELECT * 不返回所有行,除非我按 id DESC 排序

Oracle 是否有必要为具有新索引的新表收集表统计信息?

oracle - 如何提高基于 SCN 的查询性能?

c# - 使用 INSERT...RETURNING 子句导致 ORA-12537

oracle - 调用 Oracle PL/SQL 过程时使用什么编码