在 Oracle 下创建存储过程时出错 - PLS-00103
Posted
技术标签:
【中文标题】在 Oracle 下创建存储过程时出错 - PLS-00103【英文标题】:Error on creating stored procedure under Oracle - PLS-00103 【发布时间】:2012-07-31 16:00:05 【问题描述】:我正在尝试创建一个多次调用另一个的存储过程。这是通过为每个循环使用一个来完成的。所有开发均在oracle sql developer Version 3.0.04下进行。
CREATE OR REPLACE PROCEDURE Z_INBILLABILITYSERV
IS BEGIN
DECLARE
ano VARCHAR2(4);
BEGIN
select EXTRACT(YEAR FROM sysdate) into ano from dual;
FOR dat IN (SELECT * FROM Z_FECHOMES WHERE MES <=
(select EXTRACT(MONTH FROM sysdate) from dual )and ANO = ano)
LOOP
call z_insertbillability(dat.periodo_inicio,dat.periodo_fim,
dat.ano,dat.mes);
END LOOP;
END;
END;
我遇到以下错误:
错误(9,12):PLS-00103:在预期以下情况之一时遇到符号“Z_INSERTBILLABILITY”::=。 ( @ % ; 符号 ":=" 被替换为 "Z_INSERTBILLABILITY" 以继续。
如果有人有想法或提示,我现在会很高兴并且非常感激。
【问题讨论】:
【参考方案1】:你不需要call
这个词;做吧:
LOOP
z_insertbillability(dat.periodo_inicio,dat.periodo_fim,
dat.ano,dat.mes);
END LOOP;
错误消息可能有点无用,但它试图显示它可以尝试解释单词call
的所有方式,因为它不会将其识别为关键字。并显示接下来会看到的内容:作为变量名(后面是 :=
用于赋值;或模式名称(后面是 .
);或函数/过程名称(后面是(
参数列表)等。
【讨论】:
非常感谢。你能解释一下为什么不需要这个电话吗?在我看到的所有示例中,总是有 call 或 exec 这个词,到目前为止我对此没有任何问题。call
用于 JDBC 调用(可能还有其他); exec
用于 SQL*Plus。两者都表明您想要执行一些 PL/SQL 代码。一旦你进入了一个 PL/SQL 块,你就不需要再指出了。
好的,这是一个“外部资源”。非常感谢亚历克斯。祝你好运。以上是关于在 Oracle 下创建存储过程时出错 - PLS-00103的主要内容,如果未能解决你的问题,请参考以下文章
PLS-000428 错误 Oracle 存储过程与 CTE