ELSE IF在PL / SQL中不起作用

时间:2018-08-16 10:13:32

标签: oracle plsql

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

此代码有效:

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;   
/  

不是。我在代码的最后一行得到此错误:Found: ';' - Expecting IF

CREATE OR REPLACE PROCEDURE findMin(valore1 in integer, valore2 in integer, risultato out integer) IS
BEGIN
    IF(valore1 < valore2) THEN
        risultato:= valore1;
    ELSE IF (valore1 > valore2) THEN
        risultato:= valore2;    
    ELSE
        risultato := 0;              
    END IF;
END;  --here I get the error 
/  

我的错误是什么?

谢谢

2 个答案:

答案 0 :(得分:7)

如果缩进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;
    ELSE
        IF valore1 > valore2 THEN
            risultato:= valore2;    
        ELSE
            risultato := 0;              
        END IF;
    END IF;
END;
/

Procedure FINDMIN compiled

或更简单地说,更改为elsif

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

或仅是一个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

详细了解conditional statements in PL/SQL

答案 1 :(得分:3)

这是一个错字错误,将ELSE IF替换为PLSQL的ELSIF

ELSIF (valore1 > valore2) THEN
  

ELSIF

     

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