存储过程循环嵌套(2)
单层循环#
create or replace procedure demo1() is
declare
begin
for i in 1..5 loop
if i=2 then
continue;
end if;
select i;
end loop;
end;
双层循环#
循环遍历#
create or replace procedure demo2() is
declare
n number;
begin
for i in 1..3 loop
for j in 4..6 loop
select i,j;
end loop;
end loop;
end;
跳出内层循环#
方式1:
create or replace procedure demo3() is
declare
n number;
begin
for i in 1..3 loop
for j in 4..6 loop
if i= 2 then
select 'test';
continue;
end if;
select i,j;
end loop;
end loop;
end;
方式2:
declare
n number;
begin
for i in 1..3 loop
for j in 4..6 loop
if i= 2 then
select 'test';
goto next123;
end if;
select i,j;
<<next123>>
null;
end loop;
end loop;
end;
注意:
- 使用
continue
的话只是跳过本次循环,执行下次循环。针对当前的示例来说当i为2时,会输出3次test,而不会执行select i,j;
- 使用
goto
的时候不能使用next
关键字 <<next>>
标签后的null;
语句不可少,因为goto标签后必须紧接着一个执行语句
跳出外层循环#
create or replace procedure demo4() is
declare
n number;
begin
for i in 1..3 loop
for j in 4..6 loop
if i= 2 then
select 'test';
goto next123;
end if;
select i,j;
end loop;
<<next123>>
null;
end loop;
end;
- 可以根据需要跳出到指定的位置
示例#
需求:用存储过程实现查询所有用户的省份,然后输出这个省份有哪些数据
-- 1. 建表插入数据
create table t_user_info(
name varchar2(10),
p_code number
);
insert into t_user_info values ('admin',001);
insert into t_user_info values ('zs',002);
create table t_r_province_city(
code number,
c_name varchar(10)
);
insert into t_r_province_city values (001,'广州市');
insert into t_r_province_city values (002,'中山市');
insert into t_r_province_city values (003,'珠海市');
insert into t_r_province_city values (002,'温州市');
insert into t_r_province_city values (002,'嘉兴市');
-- 2. 创建存储过程
create or replace procedure find_citys() is
-- 创建游标
cursor provinces is select name,p_code from t_user_info;
begin
-- 从游标的结果取值
-- `province_obj`为每行的结果是一个对象;可以根据`对象.列名`的方式获取对应列的值
for province_obj in provinces LOOP
-- 根据p_code查询所对应的市数据有哪些
for city_obj in (select c_name from t_r_province_city where code=province_obj.p_code) LOOP
select province_obj.name,city_obj.c_name;
END LOOP;
END LOOP;
end;
- 什么时候创建游标?当需要对数据进行遍历,并且根据遍历的结果再做其他的操作时
for...in
方式遍历结果集(结果集可以是游标或其他的联表查询)的时候,可以直接拼接SQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)