• Oracle中的循环


    一.循环

      在所有的编程语言中,循环都是一个非常重要的语法,掌握循环,是程序员必不可少的工具。

      在Oracle中,常用的有四种循环,loop循环,while循环,for循环和goto循环,在本篇文章中,会向大家分别介绍这几种循环的语法,实例和基本使用注意等。(均为匿名块或有名块)

    1. loop循环

      loop经常会与exit when关键字结合使用,具体语法如下:

    1

    2

    3

    4

    5

    loop    --开始循环的标志

      loop_body;   --要执行的语句           

      exit when 条件;  --退出循环的条件

      [loop_body;]   --要执行的语句

    end loop;    --结束循环的标志

    循环输出数值:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    1. 循环打印0-100之间的所有偶数,并求和

    declare

    var_num int:=0;

    var_sum int:=0;

    begin

      loop

        dbms_output.put_line(var_num);

        var_sum := var_sum + var_num;

        var_num := var_num + 2;

        exit when var_num >100;

      end loop;

      dbms_output.put_line(var_sum);

    end;

    2. 循环打印1+2+3+4+...+10 = 55这个式子和结果

    declare

    var_num int:= 1;

    var_sum int:= 0;

    begin

      loop

        dbms_output.put(var_num);

        var_sum := var_sum + var_num;

        var_num := var_num + 1;

        exit when var_num > 10;

        dbms_output.put('+');

       end loop;

       dbms_output.put_line('='||var_sum);

    end; 

    2. while循环

      while循环和loop循环的语法非常相似,不过相较于loop循环,while循环多出了进入循环的条件,具体语法如下:

    1

    2

    3

    4

    5

    6

    while 条件   --进入循环的条件

      loop         --循环开始的标志

        loop_body;      --要执行的循环语句

        [exit when 条件;]   --中途退出的条件

      end loop;

    end;

      依旧是循环打印1-100之间的所有偶数,观察两者之间的区别

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    declare

    var_num int := 0;

    begin

      while var_num <= 100

        loop

          dbms_output.put_line(var_num);

          var_num := var_num + 2;

          exit when var_num >100;

        end loop;

    end;

      循环打印1+2+3+...+10=55这个式子和结果:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    declare

    var_num int := 1;

    var_sum int := 0;

    begin

      while var_num <= 10

        loop

          dbms_output.put(var_num);

          var_sum := var_sum + var_num;

          var_num := var_num + 1;

          exit when var_num > 10;

          dbms_output.put('+');

         end loop;

         dbms_output.put_line('='||var_sum);

    end;

    3. for 循环

      for循环是四种循环中最为简单的一种,具体语法如下:

    1

    2

    3

    4

    for 变量 in [reverse] 小值..大值 loop

      loop_body;

      [exit when 条件];

    end loop;

      reverse是逆转的意思,当有reverse关键字时,后面紧跟的值要反过来写,即大值..小值

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    # 循环打印0-100之间的所有偶数

    begin

      for var_num in 0..100 loop

        if mod(var_num,2) = 0 then

          dbms_output.put_line(var_num);

        end if;

      end loop;

    end;

    # 循环打印1+2+3+...+10=55的式子和结果

    declare

    var_sum int := 0;

    begin

      for var_num in 1..10-1 loop

        dbms_output.put(var_num);

        dbms_output.put('+');

        var_sum := var_sum + var_num;

      end loop;

      dbms_output.put_line('10='||(var_sum+10));

    end;

    4. goto循环

      goto的用法和其他三种循环都不一样,当使用goto时,可以无条件的跳到处于同一个PL/SQL块的任意执行语句处。具体使用方法如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    循环打印0-100之间的所有偶数,并求和
    declare

    var_num int := 0;

    var_sum int := 0;

    begin

      <>        --定义goto标签

      var_num := var_num + 1;                 --循环体,也就是需要执行的循环部分

      if mod(var_num,2) = 0 then

        dbms_output.put_line(var_num);

        var_sum := var_sum + var_num;

      end if;

      if var_num <= 100 then          --进入循环的条件

        goto routine;                        --返回上面的循环

      end if;

      dbms_output.put_line(var_sum);

    end;

      利用goto循环,循环打印1+2+3+...+10=55这个式子和结果:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    declare

    var_num int := 1;

    var_sum int := 0;

    begin

      <>

      dbms_output.put(var_num);

      var_sum := var_sum + var_num;

      var_num := var_num + 1;

    # 加号也是重复出现的,所以利用循环进行循环打印

    # 当var_sum+10,var_num再加上一等于11时,就不再需要加号

      if var_num <= 10 then       

        dbms_output.put('+');

      end if;

      if var_num <= 10 then

        goto circulate;

      end if;

      dbms_output.put_line('='||var_sum);

    end; 

    二. continue,retune,exit的使用

    1. continue

      continue在英文中有继续的意思,在oracle中结合循环使用,则是跳过本次循环,继续下一次循环。

      利用cintinue关键字,可以轻松的做到数据的筛选,例如打印0-100之间的所有偶数:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    declare

    var_num int := -1;

    begin

      loop

        var_num := var_num +1;

    # 当大于100时,会结束整个循环

        exit when var_num > 100;

    # 当变量为奇数时,会跳过之后的执行语句,结束这次循环,从而进入下次循环 

        if mod(var_num,2) =1 then

            continue;

        end if;

        dbms_output.put_line(var_num);

      end loop;

    end;   

      和exit比较,continue不会跳出整个循环,它只是跳过不符合条件的本次循环,从而开启新的循环,依旧处于循环阶段,直到所有数据全部循环完毕。而exit则是在符合条件后,直接结束整个循环部分,转而去执行循环体外的其他内容。

    2. return 

      在循环中使用exit和return时,两者的作用都是跳出整个循环,不过不同于exit ,return在跳出整个循环的同时,循环体外的其他内容也不会执行。

      下面给出几段代码,查看两者的不同:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    begin

      for var_num in 1..5 loop

        if var_num = 3 then

          exit;

         --return;

        end if;

        dbms_output.put_line(var_num);  

      end loop;

      dbms_output.put_line('I love oracle!');

    end; 

      结果:

    1

    2

    3

    4

    5

    6

    7

    8

    exit:

    1

    2

    I love oracle!

    return

    1

    2

      可以看出相较于exit,return直接跳出了整个循环,同时还跳过了循环外的执行语句,直接结束了整段代码。结合网上查到的资料,则可以总结到:在oracle中,return的作用,是跳出整个语句,如果是存储过程,则跳出存储过程,如果是函数,则跳出整个函数。

  • 相关阅读:
    ResNet论文及实现
    Python:实现not gate非门算法(附完整源码)
    Go 使用环境变量
    win11 home版安装vmware win10 64位系统,出现此主机不支持64位客户机操作系统问题解决
    c# Word操作
    Android网络框架(三)——iptables
    java103-字符串概述
    【leaflet】【vue】离线地图及热力图
    (二十)mmdetection源码解读:config配置文件models Faster R-CNN
    【保姆级】VitePress 新建项目+部署Github Pages流程+常见报错处理
  • 原文地址:https://blog.csdn.net/SS33SSS/article/details/136207256