Oracle数据库存储过程中cursor游标、loop循环以及for循环的用法(一篇文章讲清Oracle数据库存储过程如何使用)

Oracle数据库存储过程中cursor游标、loop循环以及for循环的用法

在Oracle存储过程中,游标(Cursor)、loop循环和for循环是常用的控制结构。下面分别介绍它们的用法:

一、游标(Cursor)

游标用于从数据库中检索数据,并且可以多次读取同一查询结果集。使用游标时,通常需要四个步骤:声明游标、打开游标、提取数据和关闭游标。

1.1 声明游标

复制代码
   declare
cursor cursor_name is select column1, column2 from table_name;
   end;
   / 

1.2 打开游标

复制代码
   begin
open cursor_name;
   end;
   / 

1.3 提取数据

复制代码
   begin
loop
fetch cursor_name into variable1, variable2;
exit when cursor_name%notfound;
-- 处理每行数据
end loop;
   end;
   / 

1.4 关闭游标

复制代码
   begin
close cursor_name;
   end;
   /

1.5 举个具体例子:
1.5.1 创建存储过程

复制代码
create or replace procedure test_select3_procedure
(sex  varchar)
AS
--游标的定义
Cursor test_cursor is
select id,ly_mc,LY_NB,ly_nl from ly_ds where LY_NB=sex;
cur test_cursor%rowtype;  --游标的类型,我理解类似于list的泛型
BEGIN
for cur in test_cursor loop
exit when test_cursor%notfound;
dbms_output.put_line('数据是:'||cur.id||'_'||cur.ly_mc||'_'||cur.LY_NB||'_'||cur.ly_nl);
end loop;
END;

1.5.2 执行存储过程

复制代码
set serveroutput on;
execute test_select3_procedure('女');

1.5.3 会得到如下的遍历结果,正是我根据条件女查询到的结果集

复制代码
PROCEDURE TEST_SELECT3_PROCEDURE 已编译
匿名块已完成
数据是:2_王五_女_22
数据是:3_赵六六_女_29
数据是:4_李四_女_20

以上代码展示了如何使用游标来处理查询结果集。

二、LOOP循环

Loop循环用于执行重复的代码块,直到满足某个条件。它适用于无限循环,可以通过EXIT WHEN语句退出循环

复制代码
   begin
loop
-- 循环体
exit when condition;
end loop;
   end;
   / 

2.1举个loop具体例子:

复制代码
【示例】打印数字1-10
--打印数字1-10
declare
  --声明循环变量并赋初始值
  v_num number  :=1;
begin
 loop
   --退出循环的条件
   exit when v_num >10;
   dbms_output.put_line(v_num);
   --循环变量自增
   v_num :=v_num+1;
 end loop;
end;

执行结果:
1
2
3
4
5
6
7
8
9
10

三、For 循环

For循环用于执行固定次数的迭代,适用于已知循环次数的情况

复制代码
   begin
for i in range起步..范围结束 loop
-- 循环体
end loop;
   end;
   / 

3.1 举个for循环的具体例子:

复制代码
-- 循环累加
declare
  var_sum number := 0;
begin
  for i in 1 .. 100 loop
    var_sum := var_sum + i;
  end loop;
  sys.dbms_output.put_line(var_sum); -- 5050
end;

综上所述,Oracle存储过程中的游标、loop循环和for循环各有其适用场景,游标适合处理查询结果集,loop循环适合无限循环 ,而for循环适合固定次数的迭代。这些控制结构在处理数据库操作时非常有用,能够提高程序的效率和灵活性。

相关推荐
知识分享小能手21 分钟前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
爬山算法39 分钟前
Hibernate(84)如何在DevOps流程中使用Hibernate?
oracle·hibernate·devops
踩坑小念1 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶2 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok3 小时前
MySQL的常用数据类型
数据库·mysql
曹牧3 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty3 小时前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存
m0_706653233 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python
山岚的运维笔记3 小时前
SQL Server笔记 -- 第15章:INSERT INTO
java·数据库·笔记·sql·microsoft·sqlserver
Lw老王要学习4 小时前
CentOS 7.9达梦数据库安装全流程解析
linux·运维·数据库·centos·达梦