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上的“输入绑定”窗口定义的。这是什么?给香蕉下定义,这不是吗?给它下定义还有别的吗?