【问题标题】:error:00103 for plsql procedure错误:00103 用于 plsql 过程
【发布时间】: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关键字。此关键字仅用于匿名块和触发器中。

标签: plsql


【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      相关资源
      最近更新 更多