Oracle Query - 缺少定义

时间:2015-06-13 02:03:53

标签: sql oracle plsql oracle-sqldeveloper

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

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;

然后输入绑定

enter image description here

并收到此错误:

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

我没有运气弄清楚它想要什么。如果我更换香蕉'具有像' 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

修改的: 我刚刚注意到错误并没有阻止数据正确合并......虽然错误仍然存​​在但

5 个答案:

答案 0 :(得分:2)

我可能会一起跳过DECLARE部分并随处使用:香蕉而不是任何东西。 BEGIN之后放:香蕉:=:香蕉;而且你没有得到任何错误。 祝你好运。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

我的情况是您的数据库列为VARCHAR2(20 BYTE),声明为whatever varchar2(20) := :bananas;。我可能会看到byte的总大小不是char

答案 3 :(得分:0)

我刚遇到类似的情况。

经过简短研究后,发现了该错误。 代码在哪里

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

我已经放弃设置VAR001

答案 4 :(得分:0)

以我为例,在调用CallableStatement :: execute()之前,我绑定了尝试访问的OUT参数。