天天看點

oracle中continue的作用,Oracle 10g PL / SQL中的“CONTINUE”關鍵字

您可以使用goto和标簽來模拟繼續。

DECLARE done BOOLEAN; BEGIN FOR i IN 1..50 LOOP IF done THEN GOTO end_loop; END IF; <> -- not allowed unless an executable statement follows NULL; -- add NULL statement to avoid error END LOOP; -- raises an error without the previous NULL END;

雖然有點複雜,隻是一個假的,你可以這樣使用exception:

DECLARE i NUMBER :=0; my_ex exception; BEGIN FOR i IN 1..10 LOOP BEGIN IF i = 5 THEN raise my_ex; END IF; DBMS_OUTPUT.PUT_LINE (i); EXCEPTION WHEN my_ex THEN NULL; END; END LOOP; END;

事實上,PL SQL确實有一些東西可以取代CONTINUE。 你所要做的就是給循環添加一個标簽(一個名字):

declare i integer; begin i := 0; <>loop i := i + 1; if i <= 3 then goto My_Small_Loop; end if; -- => means continue exit; end loop; end;

它在10g中不可用,但它是11G中的一項新function

為了将來的search,在oracle 11g中,他們添加了一個continue語句,可以像這樣使用:

SQL> BEGIN 2 FOR i IN 1 .. 5 LOOP 3 IF i IN (2,4) THEN 4 CONTINUE; 5 END IF; 6 DBMS_OUTPUT.PUT_LINE('Reached on line ' || TO_CHAR(i)); 7 END LOOP; 8 END; 9 / Reached on line 1 Reached on line 3 Reached on line 5 PL/SQL procedure successfully completed.

你可以将IF重構成一個函數,在适當的時候傳回(如果有必要的話)。 然後控制stream程将在正确的地方在循環中拾取。

那有意義嗎?

不完全優雅,但很簡單:

DECLARE done BOOLEAN; BEGIN FOR i IN 1..50 LOOP IF done THEN NULL; ELSE ; END IF; END LOOP; END;

在Oracle中,有一個類似的語句叫做EXIT,它可以退出一個循環或一個函數/過程(如果沒有循環退出)。 你可以添加一個WHEN來檢查一些條件。

你可以重寫上面的例子,如下所示:

DECLARE done BOOLEAN; BEGIN FOR i IN 1..50 LOOP EXIT WHEN done; END LOOP; END;

如果你想深入一些嵌套的循環和邏輯,這可能是不夠的,但是比GOTO和NULL更清晰。