当前位置:  开发笔记 > 编程语言 > 正文

Oracle 10g PL/SQL中的'CONTINUE'关键字

如何解决《Oracle10gPL/SQL中的'CONTINUE'关键字》经验,为你挑选了5个好方法。

我正在将TSQL存储过程迁移到PL/SQL并遇到问题 - Oracle 10g中缺少CONTINUE关键字.

我已经读过Oracle 11g将其作为一项新功能,但不幸的是,升级不是一种选择.

在10g中还有CONTINUE的替代品吗?我认为将SP的逻辑重构为一种解决办法是不切实际的,因为我有一个外部循环,一个IF,然后一个嵌套的IF,然后是该IF中语句块末尾的CONTINUE.

任何帮助都会非常感激,欢呼.



1> jop..:

您可以使用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;


为一个丑陋的解决方法+1来处理一个丑陋的声明:)
有时,我们只需要输入它并在之后覆盖我们的鼻子.:)

2> 小智..:

虽然它有点复杂而且只是假的,但你可以这样使用异常:

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;



3> Sylvain Rodr..:

事实上,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;



4> eric.itzhak..:

对于将来的搜索,在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.



5> Dilshod Tadj..:

它没有10g,但它是11G 的新功能

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有