ORA-01008: 并非所有变量都已绑定。他们被束缚

2023-12-27

我遇到了一个 Oracle 问题,到目前为止我还无法找到原因。 下面的查询在 Oracle SQL Developer 中有效,但在 .NET 中运行时会抛出:

ORA-01008: 并非所有变量都绑定

我试过了:

  • 更改 lot_priority 的 Oracle 数据类型(Varchar2 或 int32)。
  • 更改 lot_priority 的 .NET 数据类型(字符串或 int)。
  • 一个绑定变量名称在查询中使用两次。这对我来说不是问题 在多个查询中使用相同绑定变量的其他查询 位置,但为了确保我尝试将第二个实例设为它 拥有不同的 :name 变量并单独绑定它。
  • 绑定变量的几种不同方式(参见注释代码; 还有其他人)。
  • 移动 bindByName() 调用。
  • 用文字替换每个绑定变量。我有两个单独的变量导致了问题(:lot_pri 和:lot_priprc)。我不记得两者之间有一些细微的变化。更改为文字可以使查询工作,但它们确实需要与绑定一起使用。

查询和代码如下。为了保护无辜者,变量名称已更改:

SELECT rf.myrow floworder, rf.stage, rf.prss,
rf.pin instnum, rf.prid, r_history.rt, r_history.wt
FROM
(
    SELECT sub2.myrow, sub2.stage, sub2.prss, sub2.pin, sub2.prid
    FROM (
        SELECT sub.myrow, sub.stage, sub.prss, sub.pin,
            sub.prid, MAX(sub.target_rn) OVER (ORDER BY sub.myrow) target_row
            ,sub.hflag
        FROM (
            WITH floc AS 
            (
                SELECT flow.prss, flow.seq_num
                FROM rpf@mydblink flow
                WHERE flow.parent_p = :lapp
                AND flow.prss IN (
                    SELECT r_priprc.prss
                    FROM r_priprc@mydblink r_priprc
                    WHERE priprc = :lot_priprc
                )
                AND rownum = 1
            )
            SELECT row_number() OVER (ORDER BY pp.seq_num, rpf.seq_num) myrow,
                rpf.stage, rpf.prss, rpf.pin,
                rpf.itype, hflag,
            CASE WHEN rpf.itype = 'SpecialValue'
                THEN rpf.instruction
                ELSE rpf.parent_p
            END prid,
            CASE WHEN rpf.prss = floc.prss
                AND rpf.seq_num = floc.seq_num
                THEN row_number() OVER (ORDER BY pp.seq_num, rpf.seq_num)
            END target_rn
            FROM floc, rpf@mydblink rpf
            LEFT OUTER JOIN r_priprc@mydblink pp
                ON (pp.prss = rpf.prss)
            WHERE pp.priprc = :lot_priprc
            ORDER BY pp.seq_num, rpf.seq_num
        ) sub
    ) sub2
    WHERE sub2.myrow >= sub2.target_row
    AND sub2.hflag = 'true'
) rf
LEFT OUTER JOIN r_history@mydblink r_history
ON (r_history.lt = :lt
    AND r_history.pri = :lot_pri
    AND r_history.stage = rf.stage
    AND r_history.curp = rf.prid
)
ORDER BY myrow

public void runMyQuery(string lot_priprc, string lapp, string lt, int lot_pri) {
Dictionary<int, foo> bar = new Dictionary<int, foo>();
using(var con = new OracleConnection(connStr)) {
    con.Open();

    using(var cmd = new OracleCommand(sql.rtd_get_flow_for_lot, con)) { // Query stored in sql.resx
        try {
            cmd.BindByName = true;
            cmd.Prepare();
            cmd.Parameters.Add(new OracleParameter("lapp", OracleDbType.Varchar2)).Value = lapp;
            cmd.Parameters.Add(new OracleParameter("lot_priprc", OracleDbType.Varchar2)).Value = lot_priprc;
            cmd.Parameters.Add(new OracleParameter("lt", OracleDbType.Varchar2)).Value = lt;
            // Also tried OracleDbType.Varchar2 below, and tried passing lot_pri as an integer
            cmd.Parameters.Add(new OracleParameter("lot_pri", OracleDbType.Int32)).Value = lot_pri.ToString();
            /*********** Also tried the following, more explicit code rather than the 4 lines above: **
            OracleParameter param_lapp
                = cmd.Parameters.Add(new OracleParameter("lapp", OracleDbType.Varchar2));
            OracleParameter param_priprc
                = cmd.Parameters.Add(new OracleParameter("lot_priprc", OracleDbType.Varchar2));
            OracleParameter param_lt
                = cmd.Parameters.Add(new OracleParameter("lt", OracleDbType.Varchar2));
            OracleParameter param_lot_pri
                = cmd.Parameters.Add(new OracleParameter("lot_pri", OracleDbType.Varchar2));
            param_lapp.Value = lastProcedureStackProcedureId;
            param_priprc.Value = lotPrimaryProcedure;
            param_lt.Value = lotType;
            param_lot_pri.Value = lotPriority.ToString();
            //***************************************************************/
            var reader = cmd.ExecuteReader();
            while(reader.Read()) {
                // Get values from table (Never reached)
            }
        }
        catch(OracleException e) {
            //     ORA-01008: not all variables bound
        }
    }
}

为什么 Oracle 声称并非所有变量都是绑定的?


我知道这是一个老问题,但尚未得到正确解决,因此我正在为可能遇到此问题的其他人回答。

默认情况下,Oracle 的 ODP.net 按位置绑定变量,并将每个位置视为一个新变量。

正如furman87提到的,将每个副本视为不同的变量并多次设置它的值是一种解决方法,也是一种痛苦,如果您试图重写查询并移动事物,则可能会导致错误。

正确的方法是将 OracleCommand 的 BindByName 属性设置为 true,如下所示:

var cmd = new OracleCommand(cmdtxt, conn);
cmd.BindByName = true;

您还可以创建一个新类来封装 OracleCommand,在实例化时将 BindByName 设置为 true,这样您就不必每次都设置该值。这在中讨论this https://stackoverflow.com/a/5731006 post

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORA-01008: 并非所有变量都已绑定。他们被束缚 的相关文章

  • 读取大文件并制作字典

    我有一个大文件 我需要读取它并从中制作字典 我希望这一切能够尽可能快 然而我的Python代码太慢了 这是一个显示问题的最小示例 首先制作一些假数据 paste lt seq 20000000 lt seq 2 20000001 gt la
  • 如何使用最小起订量模拟私有只读 IList 属性

    我试图嘲笑这个列表 private readonly IList
  • C++0x 初始值设定项列表示例

    我想看看这个现有代码示例如何利用 C 0x 初始化列表功能 示例0 include
  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • 当 foreach 块的内容具有 Conditional 属性时,C# 编译器是否会对其进行优化?

    我正在工作中编写一些调试代码 我想知道我所做的是否会损害性能 让我们看一下代码 foreach var item in aCollection Debug WriteLine item Name 我知道 Debug 类使用 Conditio
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • 金融 - 计算到期收益率

    我读了this https stackoverflow com questions 1173555 open source financial library specifically yield to maturity发布关于 net 库
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • 应用新设置时如何防止 GraphicsDevice 被丢弃?

    我的游戏窗口允许手动调整大小 这意味着它可以像任何其他普通窗口一样通过拖动其边缘来调整大小 游戏还利用了RenderTarget2D rt2d 在主 Draw 方法中设置主渲染目标 GraphicsDevice SetRenderTarge
  • 根据 Active Directory 策略检查密码[重复]

    这个问题在这里已经有答案了 我有一个允许用户更改其 AD 密码的前端 有没有办法获取特定用户及其属性 长度 复杂性 的密码策略 例如细粒度 有没有办法根据此特定策略检查字符串 xyz121 编辑 我不想检查活动目录中存储的当前密码 我想检查
  • 为什么 rand() 总是返回相同的值? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中生成随机数 https stackoverflow com questions 3067364 generating random numbers in c 使用 rand 生成随机数 http
  • 从二进制文件读取字节到 long int

    我有两个问题 我有二进制文件的数据 我想使用 read 函数读取前 8 个字节以签署 long int 但我不能 你知道我该怎么做吗 如何直接读取一块数据到字符串中 我可以像所示那样阅读吗 前任 ifstream is is open te
  • 确定相关词的编程方式?

    使用网络服务或软件库 我希望能够识别与词根相关的单词 例如 座位 和 安全带 共享词根 座位 但 西雅图 不会被视为匹配 简单的字符串比较对于这类事情似乎是不可行的 除了定义我自己的字典之外 是否有任何库或 Web 服务不仅可以返回单词定义
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • 删除数组时出现访问冲突异常

    删除分配的内存时 出现 访问冲突读取位置 异常 如下所示 我有一个针对 Visual Studio 2010 工具集 v100 C 编译器编译的本机 dll 我有一个针对它的托管 dll 包装器 它是针对工具集 v90 编译的 因为我想以
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v
  • execlp() 系统调用输出错误

    这个非常简单的例子exec 系统调用 在这里 我试图打电话execlp 两次 但是 我没有得到例外的输出 它仅显示当前目录的第一次调用的输出 include

随机推荐

  • 无法在 macports 上安装 apt

    出现以下错误 info build Compiling contrib hashes cc to opt local var macports build opt local var macports sources rsync macpo
  • 分组依据并添加列

    我有一个名为 ward councilors 的表和两列 ward 和 councillor 该表包含所有议员及其负责的选区的列表 每个选区有三名议员 我需要做的是分组 以便每个选区有一个不同的记录和三个新列 每个列由三名议员负责该选区 例
  • 一次多个 Google Vision OCR 请求?

    根据谷歌视觉文档 http 20https cloud google com vision docs reference rest v1 images annotate 每个请求的最大图像文件数为 16 别处 https cloud goo
  • 如何在 Kotlin 中将 vararg 与不同的泛型一起使用?

    我想将 vararg 与每个参数具有不同类型的泛型一起使用 我已经尝试过的 class GeneralSpecification
  • 将之前添加的视图置于前面

    我的问题如下 我有一个视图 并向该视图添加 3 个子视图 view1 view2 view3 以该顺序 观点略有重叠 我想将第一个视图带到顶部 但我无法让它工作 我尝试添加视图insertSubview atIndex 和给予view1更大
  • 为什么共享库路径被硬编码在可执行文件中?

    最近我得到了一个测试二进制文件 当我使用 objdump 检查它时 我发现它包含硬编码的库路径 为什么需要像这样硬编码路径 路径不应该从 SHELL 环境变量或 L 参数中获取吗 objdump p 测试程序 输出包括共享库的硬编码路径 N
  • 创建名称为“org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration”的bean时出错

    我在 Eclipse 中创建了一个 Spring Maven 项目 然后我把它放在svn下的服务器上 然后我使用 import gt maven project 等再次将其导入到 Eclipse 中 我现在的App java应用程序包含以下
  • NASM 模块将十六进制转换为字符串并打印出来。已组装但未按预期工作

    我正在尝试编写一个简单的汇编代码以将十六进制值输出到屏幕上 有两个文件print screen asm它正在与其他模块一起工作 我认为问题出在我尝试将十六进制转换为字符串时的逻辑中 我的代码是 org 0x7c00 xor dx dx xo
  • 在android中提出Intent的成本

    广播需要多少性能成本intents https developer android com reference android content Intent 每秒广播多个可以吗 或者意图是否昂贵 Intent 旨在在 Android 操作系
  • Firefox 背景图像水平居中奇怪

    我正在为 CMS 构建一些基本的 HTML 代码 CMS 中与页面相关的选项之一是 背景图像 和 将页面宽度 高度拉伸到背景图像宽度 高度 这样 对于大的背景图像 整个事物就变得可见 我当前的屏幕分辨率是 1280 x 1024 如果我执行
  • Jenkins pipeline并行阶段中,如果一个阶段失败,如何及时杀死其他阶段?

    如果工作失败 我不必等待每个人都完成 是否可以中止仍在运行的并行阶段 它们必须显示为 已中止 而不是带有红十字图标 因为失败的必须突出显示 Add parallelsAlwaysFailFast给你的options 如果任何 并行 阶段失败
  • console.time() 在 Node.js 中安全吗?

    我面前有一小段 Node js 代码 如下所示 console time queryTime doAsyncIOBoundThing function err results console timeEnd queryTime Proces
  • 铁轨上的Python?

    是否可以将 Ruby on Rails 代码库转换为 Python 我认为很多人比 Ruby 更喜欢 Python 但发现 Ruby on Rails 的功能 整体上 比 Python Web 框架中的功能更好 那么 这可能吗 或者 Rub
  • 是否有任何基于abs值的ceil()函数,例如trunc与floor或从零舍入函数?

    numpy trunc是基于abs值的下取整函数 a np array 1 7 1 5 0 2 0 2 1 5 1 7 2 0 np floor a Out 122 array 2 2 1 0 1 1 2 np trunc a Out 12
  • 英特尔 C++ 编译器和 GCC 的基准测试

    我有一台运行 CentOS 5 的 AMD Opteron 服务器 我想要一个编译器 用于相当大的基于 C Boost 的程序 我应该选择哪个编译器 我希望这有助于多于伤害 一年多前的某个时候 我进行了一次编译器大战 现在我已经记不清了 G
  • 如何访问 Ruby 中的符号表?

    有没有办法访问 Ruby 符号表中的所有内容 我希望能够序列化或以其他方式保存程序运行的当前状态 为此 我似乎需要能够迭代范围内的所有变量 我认为他有 perl 背景 并且他希望获取脚本中定义的所有变量并将它们序列化 这样 当他加载文件时
  • 使用operator()对std::set进行排序以排序插入

    之后我将继续这篇文章This https stackoverflow com questions 12576763 how to sort a stdset with const getters我们有一个类 class LaneConnec
  • Java中的密码生成器[重复]

    这个问题在这里已经有答案了 我想要一个 Java 密码生成器 它应该生成符合标准标准的密码 例如至少 8 个字符长 包含一个大写字母 一个特殊字符等 如果它是开源的那就太好了 有什么建议 指示吗 Thanks 如果我是你 我会把所有允许的字
  • 如何匹配带引号的字符串后跟大括号中的字符串?

    我需要一个正则表达式来匹配引号中的字符串 然后是空格 然后是圆括号 然后是大括号 例如 这是我想在 Java 中匹配的文本 Allo Allo 1982 A Barrel Full of Airmen 7 7 这个的正则表达式是什么 抱歉
  • ORA-01008: 并非所有变量都已绑定。他们被束缚

    我遇到了一个 Oracle 问题 到目前为止我还无法找到原因 下面的查询在 Oracle SQL Developer 中有效 但在 NET 中运行时会抛出 ORA 01008 并非所有变量都绑定 我试过了 更改 lot priority 的