Oracle 否则,如果不在PL/SQL中工作

Oracle 否则,如果不在PL/SQL中工作,oracle,plsql,Oracle,Plsql,当我尝试在过程中使用ELSE IF时,我遇到了一个奇怪的错误,我无法理解我做错了什么。我正在用蟾蜍创建程序 此代码适用于: CREATE OR REPLACE PROCEDURE findMin(valore1 in integer, valore2 in integer, risultato out integer) IS BEGIN IF(valore1 < valore2) THEN risultato:= valore1; ELSE

当我尝试在过程中使用
ELSE IF
时,我遇到了一个奇怪的错误,我无法理解我做错了什么。我正在用蟾蜍创建程序

此代码适用于:

CREATE OR REPLACE PROCEDURE findMin(valore1 in integer, valore2 in integer, risultato out integer) IS
BEGIN
    IF(valore1 < valore2) THEN
        risultato:= valore1;
    ELSE
        risultato:= valore2;             
    END IF;
END;   
/  
我的错误是什么


谢谢

这是一个打字错误,如果为PLSQL,请将其替换为

埃尔西夫

引入一个布尔表达式,如果上述条件均未返回TRUE,则对该表达式求值


如果缩进
else
块,则可以看到缺少
end If

BEGIN
    IF(valore1 < valore2) THEN
        risultato:= valore1;
    ELSE
        IF (valore1 > valore2) THEN
            risultato:= valore2;    
        ELSE
            risultato := 0;              
        END IF;
    -- missing an END IF
END;
CREATE OR REPLACE PROCEDURE findMin(valore1 in integer, valore2 in integer,
  risultato out integer) IS
BEGIN
    IF valore1 < valore2 THEN
        risultato:= valore1;
    ELSIF valore1 > valore2 THEN
        risultato:= valore2;    
    ELSE
        risultato := 0;              
    END IF;
END;
/

Procedure FINDMIN compiled
您也可以在此处使用案例陈述:

CREATE OR REPLACE PROCEDURE findMin(valore1 in integer, valore2 in integer, risultato out integer) IS
BEGIN
    CASE
        WHEN valore1 < valore2 THEN
            risultato:= valore1;
        WHEN valore1 > valore2 THEN
            risultato:= valore2;    
        ELSE
            risultato := 0;              
    END CASE;
END;
/

Procedure FINDMIN compiled
创建或替换过程findMin(整数中的valore1,整数中的valore2,整数中的risultato out)是
开始
案例
当从价1<从价2时
risultato:=从价1;
当从价1>从价2时
risultato:=从价2;
其他的
risultato:=0;
终例;
结束;
/
已编译的程序FINDMIN
或者甚至只是一个case表达式,因为本例是一个简单的单赋值:

CREATE OR REPLACE PROCEDURE findMin(valore1 in integer, valore2 in integer,
  risultato out integer) IS
BEGIN
    risultato := CASE
            WHEN valore1 < valore2 THEN valore1
            WHEN valore1 > valore2 THEN valore2
            ELSE 0
        END;
END;
/

Procedure FINDMIN compiled
创建或替换过程findMin(整数中的valore1,整数中的valore2,
risultato out整数)是
开始
risultato:=案例
当从价1<从价2,则从价1
当从价1>从价2时,则从价2
其他0
结束;
结束;
/
已编译的程序FINDMIN

了解更多信息。

谢谢。我以为“elseif”只是一个命令,实际上是两个。谢谢,我知道了。顺便说一下,PL/SQL在
if
表达式中不需要括号,因为它们以
then
结尾(或
end if
)。语言倾向于使用一种或另一种方法,但不能同时使用两种方法。
CREATE OR REPLACE PROCEDURE findMin(valore1 in integer, valore2 in integer,
  risultato out integer) IS
BEGIN
    IF valore1 < valore2 THEN
        risultato:= valore1;
    ELSIF valore1 > valore2 THEN
        risultato:= valore2;    
    ELSE
        risultato := 0;              
    END IF;
END;
/

Procedure FINDMIN compiled
CREATE OR REPLACE PROCEDURE findMin(valore1 in integer, valore2 in integer, risultato out integer) IS
BEGIN
    CASE
        WHEN valore1 < valore2 THEN
            risultato:= valore1;
        WHEN valore1 > valore2 THEN
            risultato:= valore2;    
        ELSE
            risultato := 0;              
    END CASE;
END;
/

Procedure FINDMIN compiled
CREATE OR REPLACE PROCEDURE findMin(valore1 in integer, valore2 in integer,
  risultato out integer) IS
BEGIN
    risultato := CASE
            WHEN valore1 < valore2 THEN valore1
            WHEN valore1 > valore2 THEN valore2
            ELSE 0
        END;
END;
/

Procedure FINDMIN compiled