繁体   English   中英

Oracle Pl / SQL中的绑定变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM