PL / SQL函数显示错误::: ORA-06575:包或函数FUN_MIN处于无效状态

时间:2018-04-25 03:32:11

标签: oracle plsql

我无法解决此问题,请帮助

  

ORA-06575:包或函数FUN_MIN处于无效状态

create or replace Function fun_min(a number,b number,c number)
return number as
begin
if a<c and a<b
then
return a;
else if
b<a and b<c
then
return b;
else if
c<a and c<b
then
return c;
end if;
end;
/
select fun_min(1,2,3) from dual;

2 个答案:

答案 0 :(得分:2)

应该是ELSIF而不是ELSE IF

此外,没有必要写这个,Oracle已经为您提供了LEAST函数,它可以处理数字,字符串和日期。

select LEAST(1,2,3) FROM DUAL;

答案 1 :(得分:0)

正如Kaushik已经告诉过你的那样 - 语法错误。

我建议您使用单个RETURN点 - 包含其他变量(在我的示例中为RETVAL),将其设置为您要返回的值,然后RETURN retval。< / p>

SQL> CREATE OR REPLACE FUNCTION fun_min (a NUMBER, b NUMBER, c NUMBER)
  2     RETURN NUMBER
  3  AS
  4     retval   NUMBER;
  5  BEGIN
  6     IF     a < c
  7        AND a < b
  8     THEN
  9        retval := a;
 10     ELSIF     b < a
 11           AND b < c
 12     THEN
 13        retval := b;
 14     ELSIF     c < a
 15           AND c < b
 16     THEN
 17        retval := c;
 18     END IF;
 19
 20     RETURN retval;
 21  END;
 22  /

Function created.

但是,该代码错误;看看下面的例子:

  • min2应该是2
  • min3应该是3

但它们都是NULL。

SQL> SELECT fun_min (1, 2, 3) min1, fun_min (2, 2, 3) min2, fun_min (3, 3, 3) min3
  2    FROM DUAL;

      MIN1       MIN2       MIN3
---------- ---------- ----------
         1

SQL>

所以,是的 - LEAST函数可能是更好的选择,而不是所有那些IF:

SQL> CREATE OR REPLACE FUNCTION fun_min (a NUMBER, b NUMBER, c NUMBER)
  2     RETURN NUMBER
  3  AS
  4  BEGIN
  5     RETURN LEAST (a, b, c);
  6  END;
  7  /

Function created.

SQL> SELECT fun_min (1, 2, 3) min1, fun_min (2, 2, 3) min2, fun_min (3, 3, 3) min3
  2    FROM DUAL;

      MIN1       MIN2       MIN3
---------- ---------- ----------
         1          2          3