CONTINUE 语句¶
语法:
continue ::=
参数:
label 标识符,用于指定CONTINUE语句退出某一指定循环的Label名。
boolean_expression 布尔表达式,当此表达式结果为TRUE时,立即结束本次循环。
说明:
执行continue跳过本循环的continue以后的语句而重新开始下一次新的循环。continue作用于离continue语句最近的一层循环,如果continue写在循环外边会直接报错。
示例:CONTINUE语句¶
-- 清理环境
DROP PROCEDURE TEST;
-- 1. 有条件的CONTINUE WHEN语句
CREATE OR REPLACE PROCEDURE TEST AS
BEGIN
FOR i IN 1 .. 10 LOOP
CONTINUE WHEN MOD (i,2) = 0;
DBMS_OUTPUT.PUT_LINE('LOOP INDEX = ' || TO_CHAR(I));
END LOOP;
END;
/
EXEC TEST;
LOOP INDEX = 1
LOOP INDEX = 3
LOOP INDEX = 5
LOOP INDEX = 7
LOOP INDEX = 9
-- 2. 无条件的CONTINUE语句
CREATE OR REPLACE PROCEDURE TEST AS
BEGIN
<<outer>>
FOR OUTER_INDEX IN 1 .. 5
LOOP
DBMS_OUTPUT.PUT_LINE('OUTER INDEX = ' || TO_CHAR(OUTER_INDEX));
<<inner>>
FOR INNER_INDEX IN 1 .. 5
LOOP
DBMS_OUTPUT.PUT_LINE('--INNER INDEX = ' || TO_CHAR(INNER_INDEX));
CONTINUE outer;
END LOOP inner;
END LOOP outer;
END;
/
EXEC TEST;
OUTER INDEX = 1
--INNER INDEX = 1
OUTER INDEX = 2
--INNER INDEX = 1
OUTER INDEX = 3
--INNER INDEX = 1
OUTER INDEX = 4
--INNER INDEX = 1
OUTER INDEX = 5
--INNER INDEX = 1
-- 3. CONTINUE在循环语句外边会报错。
CREATE or replace PROCEDURE TEST AS
foo INTEGER := 4;
BEGIN
foo = foo-1;
if foo>0 then
continue;
end if;
dbms_output.put_line( 'foo IS:' || foo);
END;
/
EXEC TEST;
ERROR, Illegal EXIT/CONTINUE statement at line 5,it must appear inside a loop
#1: at Program TEST line 5 (continue;)
--删除过程
DROP PROCEDURE TEST;