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

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;

然后输入绑定(bind)

并得到这个错误:
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'之类的值,则它起作用,但当我使用变量并绑定(bind)该值时不起作用。有人知道我的查询出了什么问题吗?谢谢。
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

编辑:
我刚刚注意到该错误并未阻止数据正确合并...尽管该错误仍在关注

最佳答案

我可能会一起跳过DECLARE部分,并在任何地方使用:bananas而不是任何东西。
在BEGIN之后放:bananas:=:bananas;您将不会出错。
祝好运。

08-16 13:02