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之间的所有偶数,并求和<br>declare
var_num int := 0;
var_sum int := 0;
begin
  <<routine>>        --定义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
  <<circulate>>
  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的作用,是跳出整个语句,如果是存储过程,则跳出存储过程,如果是函数,则跳出整个函数。

 

  

  

 

 

  

  

  

  

 

  

  

  

 

posted @   ISPEAKER  阅读(4800)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示