【问题标题】:Oracle Query - Missing DefinesOracle 查询 - 缺少定义
【发布时间】:2015-08-29 03:11:29
【问题描述】:

我创建了一个非常简单的表格:

CREATE TABLE TMP ("ID" VARCHAR2(20 BYTE));

然后尝试这样做:

DECLARE
  whatever varchar2(20) := :bananas;
BEGIN
  MERGE INTO tmp t USING 
    (SELECT whatever AS this_id FROM DUAL) d 
  ON (t.id = d.this_id) 
    WHEN NOT MATCHED THEN 
      INSERT (id) VALUES (d.this_id);
END;

然后输入绑定

并得到这个错误:

Error starting at line : 1 in command -
DECLARE
  whatever varchar2(20) := :bananas;
BEGIN
  MERGE INTO tmp2 t USING 
    (SELECT whatever AS this_id FROM DUAL) d 
  ON (t.id = d.this_id) 
    WHEN NOT MATCHED THEN 
       INSERT (id) VALUES (d.this_id);
END;
Error report -
Missing defines

我没有运气弄清楚它想要什么。如果我将 ':bananas' 替换为 'a' 之类的值,它会起作用,但当我使用变量并绑定值时则不行。有人知道我的查询有什么问题吗?谢谢。

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE   11.2.0.4.0  Production"
TNS for IBM/AIX RISC System/6000: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

编辑: 我刚刚注意到该错误并没有阻止数据正确合并...尽管该错误仍然令人担忧

【问题讨论】:

  • 什么是:bananas?此代码是否在存储过程中?需要定义参数。
  • 我只是为变量使用了任何名称。我想将其作为带有 clob 的查询来执行,但我遇到了总是出现“缺少定义”的问题,并试图删除我的大量代码,直到我可以缩小问题范围。
  • 重新阅读您的评论,它是使用 Oracle SQL Developer 上的“输入绑定”窗口在屏幕截图中定义的
  • 什么是香蕉?定义香蕉。
  • 这不是这个吗? i.imgur.com/Kd334Ou.png 是否定义了其他东西?

标签: sql oracle plsql oracle-sqldeveloper


【解决方案1】:

就我而言,我在调用 CallableStatement::execute() 之前尝试访问绑定 OUT 参数。

【讨论】:

    【解决方案2】:

    我刚遇到类似的情况。

    经过短暂的研究,该错误被发现。 代码在哪里

    DECLARE
    VAR001 NUMBER := NULL;
    ...
    SELECT *
    ...
    AND FIELD001 = VAR001
    

    我忘记设置 VAR001

    【讨论】:

      【解决方案3】:

      我收到了同样的错误信息。我的 DB 列是 32 个字符(VARCHAR2(32 CHAR)),声明的过滤器变量是 64 个字符(szId varchar2(32) := :Id;)。我复制并粘贴了一些值作为输入变量。出于某种原因,我最后得到了空白。所以我得到了 33 个字符并提到了错误。我声明了 32 个字符并开始出现更有意义的错误。

      我的情况是,您的 DB 列是 VARCHAR2(20 BYTE),声明是 whatever varchar2(20) := :bananas;。我可能看起来byte 的总大小不是char

      【讨论】:

        【解决方案4】:

        我可能会一起跳过 DECLARE 部分并在任何地方使用 :bananas 而不是其他任何东西。 在 BEGIN 之后放 :bananas := :bananas;你不会得到任何错误。 祝你好运。

        【讨论】:

          【解决方案5】:

          尝试在语句之后单独添加一个斜杠。然后突出显示整个块并按 F5。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-03
            相关资源
            最近更新 更多