我无法解决这个问题,请帮助
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