当我尝试ELSE IF在程序中使用a时,我遇到了一个奇怪的错误,我无法理解我做错了什么.我正在用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;
/
Run Code Online (Sandbox Code Playgroud)
事实并非如此.我在最后一行代码中得到此错误: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
/
Run Code Online (Sandbox Code Playgroud)
我的错误是什么?
谢谢
如果你缩进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;
Run Code Online (Sandbox Code Playgroud)
您需要添加:
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
Run Code Online (Sandbox Code Playgroud)
或者更简单地说,改为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
Run Code Online (Sandbox Code Playgroud)
你也可以在这里使用case语句:
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
Run Code Online (Sandbox Code Playgroud)
或者甚至只是一个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
Run Code Online (Sandbox Code Playgroud)
阅读有关PL/SQL中条件语句的更多信息.
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |