Sql Oracle查询-缺少定义

Sql Oracle查询-缺少定义,sql,oracle,plsql,oracle-sqldeveloper,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 IN

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

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
我没办法弄清楚它想要什么。如果我将“:banana”替换为像“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
编辑:
我刚刚注意到错误并没有阻止数据正确合并。。。尽管尝试在语句后的一行添加斜杠,但错误仍然存在。然后突出显示整个块并按F5。

我可能会一起跳过DECLARE部分并在任何地方使用:香蕉而不是任何东西。 开始放后:香蕉:=:香蕉;你不会出错的。
祝你好运。

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


在您的案例中,您的DB列是
VARCHAR2(20字节)
,并且声明是
任何VARCHAR2(20):=:香蕉。我可能觉得
byte
在总大小上不是
char

我刚刚得到了类似的情况

经过短时间的研究,这个错误被发现了。 密码在哪里

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

我已经放弃设置VAR001了。在我的例子中,在调用CallableStatement::execute()之前,我已经绑定了试图访问的参数。

什么是
:香蕉
?此代码是否在存储过程中?需要定义参数。我只是在为变量使用任何名称。我想以CLOB查询的形式执行此操作,但我一直遇到“缺少定义”的问题,并试图删除大量代码,直到我能够缩小问题的范围。请重新阅读您的评论,它是在屏幕截图中使用Oracle SQL developer上的“输入绑定”窗口定义的。这是什么?给香蕉下定义,这不是吗?给它下定义还有别的吗?