oracle存储过程三种循环语句用法详解

当程序需要反复执行某一操作时,就必须使用循环结构。PL/SQL 中的循环语句主要包括LOOP语句、WHERE语句和FOR语句3种。本篇博客主要讲解这三种用法及代码示例。

本篇博客主要围绕 基本语法、简单代码示例,以及实战上常用的示例,这三点来讲解,学习循环看这一篇足够了。

LOOP语句

LOOP语句会先执行一次循环体,然后再判断EXIT WHEN关键字后面的条件表达式是ture还是false,为true的时候退出循环体,否则程序将再次执行循环体。

基本语法:

loop
    A;
    EXIT WHEN B;
END LOOP;

A: 代表循环体中的sql语句,可以是一句也可能是多句,这是循环体核心部分,这些语句至少被执行一遍。
B: 循环结束条件表达式,为ture时,退出循环,否则再次执行循环体。

代码示例:

-- Created on 2020/12/16 by GUO 
declare 
  i int:= 0;
begin
  loop
    i:=i+1;
    dbms_output.put_line(i);
    EXIT WHEN i > 3;
  END LOOP;
end;

运行结果:
在这里插入图片描述

实战示例:

使用Loop+游标的时候,取游标当中的值,必须重新赋值一遍,要不然会报错。

-- Created on 2020/12/17 by GUO 
declare
  cursor user is
    select * from user_table;
  user1 user_table%rowtype;
begin
  open user;
  loop
    fetch user into user1;
    exit when user%notfound;
    dbms_output.put_line('用户名称:' || user1.USER_NAME);
    dbms_output.put_line('用户年龄:' || user1.USER_AGE);
  end loop;
  close user; --关闭游标
end;

WHILE语句

在执行之前,首先要判断条件表达式的值是否为true,true则执行循环体,否则退出WHILE循环,继续执行循环后面的代码。

基本语法:

while a loop
  b;
end loop;

A: 表示一个条件表达式,当值为true时,程序执行循环体,否则退出。
B: 循环体内的sql语句。

代码示例:

-- Created on 2020/12/17 by GUO 
declare
  i int := 0;
begin
  while i < 3 loop
    i := i + 1;
    dbms_output.put_line(i);
  end loop;
end;

运行结果:
在这里插入图片描述

实战示例:

-- Created on 2020/12/17 by GUO 
declare
  cursor user is
    select * from user_table;
  user1 user_table%rowtype;
begin
  open user;
  fetch user into user1;
  while(user%found)loop
  dbms_output.put_line('用户名称:' || user1.USER_NAME);
  fetch user into user1;
  end loop;
end;

FOR语句

FOR语句是一个可提前设置循环次数的循环控制语句,它有一个循环计数器,通常是一个整型变量,通过这个计数器来控制循环次数。

基本语法:

for A IN (reverse) B...C LOOP
   D;
 END LOOP;

A: 表示一个变量,通常为证书类型,用来作为计数器,默认值是递增的,当循环当中使用reverse关键字时,就会循环递减。
B: 计数器下线值,当计数器的值小于下限值的时候,终止循环。
C: 计数器上线值,当计数器的值大于上限值的时候,终止循环。
D: 循环体。

代码示例:

-- Created on 2020/12/17 by GUO 
declare 
  i int := 0;
begin
  for i IN reverse 1..5 LOOP
    dbms_output.put_line(i);
  END LOOP;
end;

运行结果:
在这里插入图片描述

实战示例:

配合游标使用

-- Created on 2020/12/17 by GUO 
declare
  cursor user is
    select * from user_table;
begin
  for user1 in user loop
  dbms_output.put_line('用户名称:'||user1.USER_NAME);
  dbms_output.put_line('用户年龄:'||user1.USER_AGE);
  end loop;
end;

猜你喜欢

转载自blog.csdn.net/weixin_43888891/article/details/111305170
今日推荐