错误:00103 用于 plsql 过程

Posted

技术标签:

【中文标题】错误:00103 用于 plsql 过程【英文标题】:error:00103 for plsql procedure 【发布时间】:2016-06-26 20:18:26 【问题描述】:

我收到如下错误:

错误(5,1):PLS-00103:预期时遇到符号“DECLARE” 下列之一:开始函数杂注过程子类型类型 current 光标删除存在先前的外部语言符号“开始”是 替换为“DECLARE”以继续。

错误(5,1):PLS-00103:预期时遇到符号“DECLARE” 下列之一:开始函数杂注过程子类型类型 current 光标删除存在先前的外部语言符号“开始”是 替换为“DECLARE”以继续。

我的代码是:

CREATE OR REPLACE PROCEDURE procExplicitCursorAccountSlct
AS
DECLARE 
  CURSOR C1 IS SELECT * FROM ACCOUNT;
BEGIN
  OPEN C1;
  FOR i in C1 LOOP
  FETCH C1 INTO ID,ACCOUNTTYPE,BALANCE;
  EXIT WHEN C1%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(ID||'-'||ACCOUNTTYPE||'-'||BALANCE);
    DBMS_OUTPUT.PUT_LINE(C1%ROWCOUNT);
  END LOOP;  
  CLOSE C1;    
END;

【问题讨论】:

只需删除 DECLARE 关键字。参考CREATE PROCEDURE的语法:docs.oracle.com/database/121/LNPLS/…IS/AS关键字后面有declre_section,但是这个部分不包含DECLARE关键字。此关键字仅用于匿名块和触发器中。 【参考方案1】:

试试这个并查看内联 cmets 进行修改。希望对您有所帮助。

CREATE OR REPLACE
PROCEDURE procExplicitCursorAccountSlct
AS
  CURSOR C1
  IS
    SELECT
      *
    FROM
      ACCOUNT;
--Variabke declaration was missing
  ID          NUMBER;
  ACCOUNTTYPE VARCHAR2(100);
  BALANCE     NUMBER;
  --Variabke declaration was missing
BEGIN
  OPEN C1;
  LOOP
    FETCH
      C1
    INTO
      ID,
      ACCOUNTTYPE,
      BALANCE;
    EXIT
  WHEN C1%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(ID||'-'||ACCOUNTTYPE||'-'||BALANCE);
    DBMS_OUTPUT.PUT_LINE(C1%ROWCOUNT);
  END LOOP;
  CLOSE C1;
END;

【讨论】:

【参考方案2】:

您可以使用隐式循环使其变得更简单(也可以删除 DECLARE):

CREATE OR REPLACE PROCEDURE procExplicitCursorAccountSlct
AS
  CURSOR C1 IS SELECT * FROM ACCOUNT;
BEGIN
  FOR i in C1 LOOP
    DBMS_OUTPUT.PUT_LINE(i.ID||'-'||i.ACCOUNTTYPE||'-'||i.BALANCE);
    DBMS_OUTPUT.PUT_LINE(C1%ROWCOUNT);
  END LOOP;  
END;

【讨论】:

以上是关于错误:00103 用于 plsql 过程的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程运行时错误与 pls 00103

执行存储过程“PLS-00103”时出现此错误

Sql 过程如何使用 IN OUT 返回多个值:PLS-00103 错误

匿名程序的 PLS-00103 错误

运行程序时出现错误 PLS-00103

Oracle 错误 PLS-00103