首页 > 数据库 > > 控制语句-GOTO语句
GOTO语句可以实现从GOTO位置到目标语句的无条件跳转。GOTO语句会改变原本的执行逻辑,因此应该慎重使用,或者也可以使用EXCEPTION处理特殊场景。当执行GOTO语句时,目标Label必须是唯一的。
label declaration ::=

goto statement ::=

CREATE OR REPLACE PROCEDURE GOTO_test()
AS
DECLARE
v1 int;
BEGIN
v1 := ;
LOOP
EXIT WHEN v1 > 100;
v1 := v1 + 2;
if v1 > 25 THEN
GOTO pos1;
END IF;
END LOOP;
<<pos1>>
v1 := v1 + 10;
raise info 'v1 is %. ', v1;
END;
/
call GOTO_test();
GOTO使用有以下限制场景
BEGIN GOTO pos1; <<pos1>> SELECT * FROM ... <<pos1>> UPDATE t1 SET ... END;
BEGIN
GOTO pos1;
IF valid THEN
<<pos1>>
SELECT * FROM ...
END IF;
END;
BEGIN
IF valid THEN
GOTO pos1;
SELECT * FROM ...
ELSE
<<pos1>>
UPDATE t1 SET ...
END IF;
END;
BEGIN
GOTO pos1;
BEGIN
<<pos1>>
UPDATE t1 SET ...
END;
END;
BEGIN
<<pos1>>
UPDATE t1 SET ...
EXCEPTION
WHEN condition THEN
GOTO pos1;
END;
DECLARE
done BOOLEAN;
BEGIN
FOR i IN 1..50 LOOP
IF done THEN
GOTO end_loop;
END IF;
<<end_loop>> -- not allowed unless an executable statement follows
NULL; -- add NULL statement to avoid error
END LOOP; -- raises an error without the previous NULL
END;
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3158705/ ,如需转载,请注明出处,否则将追究法律责任。