错误: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 过程的主要内容,如果未能解决你的问题,请参考以下文章