在做plsql时遇到以下错误

时间:2017-02-28 11:34:14

标签: sql oracle plsql oracle11g

create procedure hcf2(a in number,b in number) return number as
begin
   if b = 0 then
     return a;
   else
     return hcf2(b,mod(a,b));
   end if;
end;

错误

LINE/COL ERROR
-------- -----------------------------------------------------------------
1/41     PLS-00103: Encountered the symbol "RETURN" when expecting one of
         the following:
         ; is with authid as cluster order using external
         deterministic parallel_enable pipelined result_cache
         The symbol "authid was inserted before "RETURN" to continue.

2 个答案:

答案 0 :(得分:1)

基本上你在这里尝试的是使用Function而不是Procedure。 可以通过两种方式使用 RETURN 语句。一个在 FUNCTION 中,它确定Functon的返回类型。 第二种类型,Oracle服务器立即将执行控制发送回直接调用代码或主机环境。在 RETURN 语句后的块中不会处理其他语句。

create or replace function hcf2(a in number,b in number) return number as
begin
   if b = 0 then
     return a;
   else
     return hcf2(b,mod(a,b));
   end if;
end;

答案 1 :(得分:1)

请阅读RETURN statement

的文档
  

<强>表达

     

当RETURN语句位于流水线表函数中时可选。   RETURN语句在任何其他函数中时是必需的。 不会   当RETURN语句在过程中或匿名时允许   块。

由于您正在尝试创建过程,因此您无法在RETURN语句中使用表达式。