我创建了一个非常简单的表:
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;您将不会出错。
祝好运。