当我尝试在过程中使用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
/
我的错误是什么?
谢谢
答案 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
答案 1 :(得分:3)
这是一个错字错误,将ELSE IF
替换为PLSQL的ELSIF
ELSIF (valore1 > valore2) THEN
ELSIF
引入一个布尔表达式,如果上述条件均未返回TRUE,则将对其求值。