oracle - 在 OCI 中使用 PL/SQL 变量会导致 "ORA-01008: not all variables bound"错误

标签 oracle plsql oracle-sqldeveloper oracle-call-interface ora-01008

以下(高度设计和简化的)示例在 SQLDeveloper 中运行良好,但在通过 OCI 运行时会导致 ORA-01008 错误。

declare
  CURRENT_LINE_ID NUMBER := 120;
  TARGETVAR NUMBER;
begin
  SELECT 1 INTO TARGETVAR FROM DUAL WHERE 120 = :CURRENT_LINE_ID;
end;

有什么方法可以重构它,以便在 OCI 中满足绑定(bind)变量吗?

我尝试过substitution variables有一点(在 SQL Developer 中同样有效),但 DEFINE 在 OCI 中似乎完全无效。

DEFINE MYSUBST = 120;
DECLARE
  TARGETVAR NUMBER;
BEGIN
  SELECT 1 INTO TARGETVAR FROM DUAL WHERE 120 = &MYSUBST;
END;

最佳答案

当您使用 :CURRENT_LINE_ID NUMBER 时,OCI 仅在主机程序中查找该绑定(bind)变量。这里是C++。因此,您应该在 C++ 程序的 exec 声明部分或任何应该在的位置声明此变量。当您在SQL Developer中运行任何内容时,当遇到:variable时,它会盲目地提示用户输入它的值,因此不要将其与它的方式混淆并且 oci 库 可以工作。

最后,在您的情况下,当使用 PL/SQL 并在那里声明变量时,您始终可以在不使用 冒号 的情况下引用它。如果您想从主机程序绑定(bind)它,您可以将其声明为主机变量PRO*C 支持这一点。不确定c++。 pro*c只不过是oracle提供的C中的嵌入式sql

关于oracle - 在 OCI 中使用 PL/SQL 变量会导致 "ORA-01008: not all variables bound"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20694572/

相关文章:

oracle - 有没有办法确定一个包在 Oracle 中是否有状态?

xml - 在 oracle 的 XML 文档中添加命名空间

sql - PL/SQL 的隐藏特性

windows - 如何在 Win 64 上使用 32 位 JDK 启动 Oracle SQL Developer 4?

sql - Oracle 查询连接问题

mysql - 如何获取特定行的列值的计数?

python - cx_Oracle中如何使用Pandas Write_Frame将结果导出到Oracle数据库

sql - PLSQL : Get sum for each day of week and total sum for week in a single query

linux - 主机 key 验证失败。甲骨文11g

mysql - 使用 SQLDeveloper 查询 mysql 数据库不返回正确的值