pl/sql函数显示:::: ora-06575:软件包或函数fun_min处于无效状态



我无法解决这个问题,请帮助

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;

应该是 ELSIF而不是 ELSE IF

另外,无需写这篇文章,Oracle已经为您提供了LEAST功能,该功能可用于数字,字符串和日期。

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

kaushik已经告诉您 - 语法错误。

我建议您使用一个RETURN点 - 包括附加变量(在我的示例中(,将其设置为要返回的值,然后将其设置为RETURN retval

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

,但它们两个都是无效的。

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

最新更新