oracle循环语句

oracle学习--循环语句


loop循环:
create or replace procedure pro_test_loop is
i number;
begin
i:=0;
loop
  i:=i+1;
  dbms_output.put_line(i);
  if i>5 then
    exit;
  end if;
end loop;
end pro_test_loop;

while循环:
create or replace procedure pro_test_while is
i number;
begin
i:=0;
while i<5 loop
  i:=i+1;
  dbms_output.put_line(i);
end loop;
end pro_test_while;

for循环1:
create or replace procedure pro_test_for is
i number;
begin
i:=0;
for i in 1..5 loop
  dbms_output.put_line(i);
end loop;
end pro_test_for;

for循环2:
create or replace procedure pro_test_cursor is
userRow t_user%rowtype;
cursor userRows is
select * from t_user;
begin
for userRow in userRows loop
    dbms_output.put_line(userRow.Id||','||userRow.Name||','||userRows%rowcount);
end loop;
end pro_test_cursor;
### Oracle 数据库中循环语句的使用方法及示例 在 Oracle 数据库中,循环语句是存储过程和 PL/SQL 块中的重要组成部分,用于控制程序流程。以下是常见的循环语句类型及其使用方法: #### 1. **LOOP 循环** `LOOP` 是一种基本的无限循环结构,通常需要配合 `EXIT` 或 `EXIT WHEN` 来终止循环。 ```sql DECLARE i NUMBER := 1; BEGIN LOOP DBMS_OUTPUT.PUT_LINE('i = ' || i); EXIT WHEN i >= 5; -- 当 i 达到或超过 5 时退出循环 i := i + 1; END LOOP; END; ``` 上述代码展示了如何通过 `EXIT WHEN` 条件来控制循环结束[^1]。 #### 2. **WHILE LOOP 循环** `WHILE LOOP` 在满足条件时执行循环体,适合于未知迭代次数但有条件限制的场景。 ```sql DECLARE i NUMBER := 1; BEGIN WHILE i <= 5 LOOP DBMS_OUTPUT.PUT_LINE('i = ' || i); i := i + 1; END LOOP; END; ``` 此示例中,循环会在 `i` 小于等于 5 的条件下持续运行[^1]。 #### 3. **FOR LOOP 循环** `FOR LOOP` 适用于已知迭代次数的场景,语法简洁且易于维护。 ```sql BEGIN FOR i IN 1..5 LOOP DBMS_OUTPUT.PUT_LINE('i = ' || i); END LOOP; END; ``` 这段代码展示了如何利用 `FOR LOOP` 实现从 1 到 5 的迭代输出[^1]。 #### 4. **结合游标的循环** 游标(Cursor)常与循环结合使用,处理查询结果集中的每一行数据。 ```sql DECLARE CURSOR emp_cursor IS SELECT employee_id, first_name FROM employees WHERE department_id = 10; emp_record emp_cursor%ROWTYPE; BEGIN OPEN emp_cursor; LOOP FETCH emp_cursor INTO emp_record; EXIT WHEN emp_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_record.employee_id || ', Name: ' || emp_record.first_name); END LOOP; CLOSE emp_cursor; END; ``` 上述代码演示了如何通过游标逐行处理查询结果,并在没有更多数据时退出循环[^1]。 #### 5. **FOR 循环结合游标** `FOR LOOP` 可以直接与隐式游标结合,简化代码结构。 ```sql BEGIN FOR emp_record IN (SELECT employee_id, first_name FROM employees WHERE department_id = 10) LOOP DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_record.employee_id || ', Name: ' || emp_record.first_name); END LOOP; END; ``` 这种写法更加简洁,避免了显式声明和管理游标的过程[^1]。 --- ### 注意事项 - 在实际应用中,应根据具体需求选择合适的循环结构。 - 使用 `EXIT` 或 `EXIT WHEN` 时,确保逻辑清晰,避免死循环。 - 游标操作需注意资源释放,例如关闭显式游标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值