Oracle中的for和while循环

本文详细介绍了两种常见的循环结构:for循环和while循环,并通过具体示例展示了它们的应用场景。此外,还探讨了游标与循环结合使用的技巧。

有两种方式可以实现条件循环

一、for 变量 in 开始数值...结束数值 loop end loop;

二、while 条件 loop end loop;

loop的使用方式:

一、X := 100;

LOOP

X := X + 10;

IF X > 1000 THEN

EXIT;

END IF END LOOP;

Y := X;

二、 X := 100;

LOOP

X := X + 10;

EXIT WHEN X > 1000;

X := X + 10;

END LOOP;

Y := X;

还有一个GOTO的使用,在后面的过程中会有的,用来产生错误日志。

以下是一个非常简单的过程,用来熟悉循环的!

create or replace procedure count_number is

/*

功能描述:计算计算出1到100的和

t的值为和

*/

i number(10);

t number(10);

begin

/*

i := 1;

t := 0;

--用while+loop实现

/*begin

while i <= 100 loop

t := t + i;

i := i + 1;

end loop;

end;

*/

i := 1;

t := 0;

--用for实现

begin

for i in 1 .. 100 loop

t := t + i;

end loop;

end;

end count_number;

for循环:

[PL/SQL] 用For Loop 替代Cursor


CURSOR FOR Loop

FOR employee_rec in c1 ---employee_rec直接用,不用提前定义

LOOP

total_val := total_val + employee_rec.monthly_income;

END LOOP;

当使用CURSOR FOR Loop时,不用我手工open cursor close cursor

应用:

begin

FOR emm IN ( SELECT ro_site, ns_site, product_line, wh_type

FROM eis_hq_invhl_mail_data

WHERE report_type = 'Detailed' )

LOOP

DBMS_OUTPUT.put_line( emm.product_line );

eis_hq_invhl_pkg.make_mail_detailed_data

( p_ro_site => emm.ro_site,

p_ns_site => emm.ns_site,

p_product_line => emm.product_line,

p_wh_type => emm.wh_type,

p_current_day => to_date('2005-11-07','yyyy-MM-dd') );

END LOOP;

end;

存储过程DIY2----游标与循环

while循环:

WHILE( i <= CEIL( LENGTH( p_clob_data ) / 4000 ))

LOOP

v_clob_data := TRIM( SUBSTR( p_clob_data,

i * 4000,

4000 ));

DBMS_OUTPUT.put_line( SUBSTR( v_clob_data,

0,

255 ));

i := i + 1;

END LOOP;

<think> 我们正在处理用户关于OracleWHILE循环的查询。用户希望了解使用方法、示例等。根据提供的引用材料,我们有以下相关信息: 引用[1]提到:WHILE循环属于PL/SQL的四种循环类型之一(简单循环WHILE循环FOR循环、游标FOR循环)。文中还提到Oracle 11g引入了CONTINUECONTINUE WHEN语句,以及嵌套循环。 引用[2]说明:WHILE循环在condition为TRUE时执行循环体,为FALSE或NULL时退出循环。强调需要定义循环控制变量并在循环体内修改其值。 引用[3]给出了具体示例:使用WHILE循环计算1到10的累加值。 引用[4]提到游标循环嵌套,但用户主要关注WHILE循环,所以暂时不深入游标部分。 引用[5]关于WITH子句,与WHILE循环无关。 因此,回答将聚焦WHILE循环: 1. 基本语法:WHILE condition LOOP ... END LOOP; 2. 关键点:必须初始化循环控制变量,在循环体内更新变量值 3. 示例:采用引用[3]的累加计算示例并适当扩展 4. 附加说明:可结合CONTINUE语句(引用[1])嵌套循环 结构化回答: - 先解释语法 - 给出基础示例(累加) - 补充进阶用法(嵌套、CONTINUE) - 注意事项 </think> ### OracleWHILE循环的使用方法与示例 在Oracle PL/SQL中,**WHILE循环**是一种基于条件判断的循环结构,当指定条件为`TRUE`时重复执行代码块,条件变为`FALSE`或`NULL`时退出循环[^2]。 #### 基本语法格式 ```sql WHILE condition LOOP -- 循环体语句 -- 必须包含修改循环条件的语句 END LOOP; ``` #### 关键特性 1. **条件控制**:循环执行前先检查`condition`表达式 2. **变量要求**: - 必须声明循环控制变量 - 必须在循环体内修改变量值[^2] 3. **终止场景**:当`condition`评估为`FALSE`/`NULL`时退出 #### 基础示例:计算1~10累加值 ```sql DECLARE i NUMBER := 1; -- 初始化计数器 v_sum NUMBER := 0; -- 存储累加结果 BEGIN WHILE i <= 10 LOOP -- 条件判断 v_sum := v_sum + i; i := i + 1; -- 修改控制变量 END LOOP; DBMS_OUTPUT.PUT_LINE('累加结果: ' || v_sum); -- 输出55 END; ``` #### 进阶用法 **1. 嵌套循环示例**(结合游标) ```sql DECLARE CURSOR dept_cur IS SELECT deptno FROM departments; CURSOR emp_cur(v_dept NUMBER) IS SELECT ename FROM employees WHERE deptno = v_dept; BEGIN FOR d_rec IN dept_cur LOOP -- 外层FOR循环 DBMS_OUTPUT.PUT_LINE('部门:'||d_rec.deptno); DECLARE v_count NUMBER := 0; BEGIN WHILE v_count < 3 LOOP -- 内层WHILE循环 FOR e_rec IN emp_cur(d_rec.deptno) LOOP EXIT WHEN v_count >= 3; -- 控制嵌套深度 DBMS_OUTPUT.PUT_LINE('--员工:'||e_rec.ename); v_count := v_count + 1; -- 修改控制变量 END LOOP; END LOOP; END; END LOOP; END; ``` **2. 使用`CONTINUE`控制流程**(Oracle 11g+) ```sql DECLARE i NUMBER := 0; BEGIN WHILE i < 10 LOOP i := i + 1; CONTINUE WHEN MOD(i,2)=0; -- 跳过偶数 DBMS_OUTPUT.PUT_LINE('奇数: '||i); END LOOP; END; -- 输出:1,3,5,7,9 ``` #### 注意事项 1. **避免死循环**:必须确保条件最终会变为`FALSE` 2. **变量初始化**:控制变量需在循环外声明并赋初值 3. **性能考虑**:复杂条件判断可能影响效率,可考虑用FOR循环替代简单计数场景 > 当需要动态控制循环次数且循环次数未知时,WHILE循环比数值FOR循环更适用[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值