[英]Binding variables in Oracle Pl/SQL
我需要在Oracle中使用绑定来绕过某种回旋方式。 我了解这样做的方式。 但是,当我在程序中使用它时,它给我一个错误。
我的代码是这样的:
CREATE OR REPLACE PROCEDURE FREQUENCY
IS
VISITOR CUSTOMER%ROWTYPE;
TYPE FREQ IS VARRAY(4) OF NUMBER(4);
CURSOR CUSTOMERS IS
SELECT * FROM CUSTOMER;
FREQUENT FREQ:=(0,0,0,0);
BEGIN
OPEN CUSTOMER;
LOOP
FETCH CUSTOMERS INTO VISITOR;
EXIT WHEN CUSTOMERS%NOTFOUND;
FREQUENT(VISITOR.BRANCHID):=FREQUENT(VISITOR.BRANCHID)+1;
END LOOP;
END;
当我在VISITOR.BRANCHID变量之前使用冒号时,出现错误Bad Bind Variable VISITOR
错误,如果不使用冒号,则出现错误Wrong Expression Type
。
我可能做错了什么? BranchId是整数。
此代码的完整错误堆栈为:
7/16 PLS-00382: expression is of wrong type
7/10 PL/SQL: Item ignored
10/7 PLS-00456: item 'CUSTOMER' is not a cursor
10/2 PL/SQL: SQL Statement ignored
14/3 PLS-00320: the declaration of the type of this expression is incomplete or malformed
14/3 PL/SQL: Statement ignored
你有两个错误。 OPEN
使用了错误的名称,应该是OPEN CUSTOMERS
而不是OPEN CUSTOMER
。 正如PLS-00320建议的那样,PLS-00382来自声明。 您缺少类型; 代替:
FREQUENT FREQ:=(0,0,0,0);
你应该有:
FREQUENT FREQ:=FREQ(0,0,0,0);
通过这两个更改,假设您有一个带branchid
列的customer
表, branchid
编译过程。
这与绑定变量无关。 如果您引用了:VISITOR.BRANCHID
那么您将尝试引用一个名为VISITOR
的绑定变量,但是您没有一个(因此您将获得PLS-00049); 并且您不需要此代码。 我认为您在此混淆术语和语法。
“错误的表达式类型”错误引用此行:
FREQUENT FREQ:=(0,0,0,0);
它应该是:
FREQUENT FREQ:=FREQ(0,0,0,0);
(您正在使用哪种工具来运行该工具,而不显示行号或所有消息?)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.