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;