2012-07-31 71 views
0

我试图创建一个存储过程,该存储过程调用另一次。这是通过使用每个循环来完成的。所有的开发都在oracle sql developer版本3.0.04在Oracle下创建存储过程时出错 - PLS-00103

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”继续

如果任何人有一个想法或提示,我会很高兴到现在,并希望很多

回答

0

你做。不需要字call;只是做:

LOOP 
     z_insertbillability(dat.periodo_inicio,dat.periodo_fim, 
                  dat.ano,dat.mes); 
    END LOOP; 

该错误消息或许有点无益的,但它是为了要显示它可能试图解释这个词call的所有方式,因为它不承认它作为一个关键字,并显示它将期望看到的每一个:作为一个变量名(这将是b e之后是:=作为转让;或模式名称(其后面会跟着.);或功能/程序名称(其后面会跟着参数列表()等。

+0

非常感谢。你能解释我为什么不需要这个电话吗?在所有我见过的例子中总是有call或exec这个词,到目前为止,我没有任何问题。 – FEST 2012-07-31 16:13:47

+1

'call'用于JDBC调用(也可能是其他); exec *用于SQL * Plus。两者都表明你想执行一些PL/SQL代码。一旦你进入PL/SQL块,你不需要再次指出。 – 2012-07-31 16:18:11

+0

好的,这是一个“外部资源”。非常感谢Alex。万事如意。 – FEST 2012-07-31 16:24:50