我无法解决此问题,请帮助
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;
答案 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.
但是,该代码错误;看看下面的例子:
但它们都是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