oracle的loop等循环语句的几个用法小例子

--loop循环用法 (输出1到10)
declare v_num number(2) := 0;
begin 
  loop
    v_num := v_num + 1;
    exit when v_num > 10;
    --上面退出循环也可以用下面3行
     /* if(v_num > 9) then
        exit;
     end if;*/
    dbms_output.put_line(v_num); 
  end loop;  
end;

--while loop循环用法 (输出1到10)
declare v_num number(2) := 0;
begin 
  while v_num < 10 loop
     v_num := v_num + 1;
     dbms_output.put_line(v_num);
  end loop;  
end;

--for loop循环用法1 (输出1到10)
declare v_num number(2) := 99;
begin
  for v_n in 1 .. v_num loop    
     exit when v_n > 10;
     dbms_output.put_line(v_n);
  end loop;
end;

--for loop循环用法2 (输出某个表的序号、列数据)
begin
   for v_n in(select amount,rownum from tmp) loop 
      dbms_output.put_line(v_n.rownum || ' , ' || v_n.amount);
   end loop;
end;


---个循环打印某个月日历例子
declare v_days number(2); 
        v_firstday number(2);
        v_result varchar2(4000);
        v_d varchar(100);
        v_month date;
begin
   v_month := to_date('20170301','yyyymmdd');
   v_result := to_char(v_month,'yyyy') || '年' || to_char(v_month,'mm') || '月' || chr(10) ||  '日 一 二 三 四 五 六' || chr(10);
   select to_char(last_day(v_month), 'dd') into v_days from dual;--当月多少天
   select to_char(trunc(v_month, 'mm'),'d') into v_firstday from dual;--当月第1天是星期几:1-7    
   --1号所在星期几的之前每一天补3个空格
   for v_week in 1 .. v_firstday - 1  loop
      exit when v_firstday < 2;
      v_result := v_result || '   ';      
   end loop;
   for v_date in 1 .. v_days loop
      v_d := v_date;
      if(length(v_date) = 1) then
         v_d :=  ' '||v_date ;                
      end if;
      v_result := v_result || v_d || ' ';     
      if(mod(v_date + v_firstday, 7) = 1) then
          v_result := v_result || ' ' || chr(10);       
      end if;
   end loop;  
   dbms_output.put_line(v_result);
end;
/*
运行结果:

2017年03月
日 一 二 三 四 五 六
          1  2  3  4  
 5  6  7  8  9 10 11  
12 13 14 15 16 17 18  
19 20 21 22 23 24 25  
26 27 28 29 30 31 
*/

### SQL 中 `FOR` 循环语句的使用方法 在不同的数据库管理系统中,`FOR` 循环的具体实现有所不同。以下是几种常见数据库系统中 `FOR` 循环的应用。 #### MySQL 和标准 SQL 的处理方式 MySQL 并不直接支持 `FOR` 循环结构,通常通过游标或存储过程中的 `WHILE` 或者 `LOOP` 来模拟循环行为[^1]: ```sql DELIMITER // CREATE PROCEDURE example_loop() BEGIN DECLARE v_counter INT DEFAULT 1; WHILE v_counter <= 10 DO SELECT CONCAT('Loop iteration ', v_counter); SET v_counter = v_counter + 1; END WHILE; END // DELIMITER ; ``` 此代码创建了一个名为 `example_loop` 的存储过程,在其中定义变量 `v_counter` 初始化为 1,并利用 `WHILE` 循环打印迭代次数直到计数器达到 10。 #### Oracle PL/SQL 中的 `FOR` 循环 Oracle 提供了更为直观的支持,可以直接编写 `FOR` 循环来遍历指定范围内的数值。下面是一个简单的例子展示了如何计算从 1 到 1000 的整数之和以及反向输出 1 至 10 的序列[^2]: ```plsql DECLARE -- 定义用于保存求和的结果 sum_result INTEGER := 0; BEGIN -- 计算从 1 加到 1000 的总和 FOR var IN 1..1000 LOOP sum_result := sum_result + var; END LOOP; DBMS_OUTPUT.PUT_LINE('The result of adding numbers from 1 to 1000 is: ' || TO_CHAR(sum_result)); -- 反序输出 1 到 10 FOR var IN REVERSE 1..10 LOOP DBMS_OUTPUT.PUT_LINE('Reverse loop at position: ' || TO_CHAR(var)); END LOOP; END; / ``` 这段程序首先声明了一个局部变量 `sum_result` 用来累积相加的结果;接着进入第一个 `FOR` 循环完成累加运算;最后再执行一次带有 `REVERSE` 关键字修饰过的 `FOR` 循环以降序显示数字。 #### PostgreSQL 中的 `FOR` 循环 PostgreSQL 支持类似于 PL/pgSQL 的语法风格,允许开发者轻松地构建复杂的逻辑控制流。这里给出一段类似的累加操作示例[^3]: ```sql DO $$ <<outer_block>> DECLARE sum_result BIGINT := 0; BEGIN FOR i IN 1..1000 BY 1 LOOP sum_result := sum_result + i; END LOOP; RAISE NOTICE 'Summation result between 1 and 1000 inclusive is %', sum_result; END $$ LANGUAGE plpgsql; ``` 上述脚本同样实现了相同的功能——即对给定区间内所有正整数做求和处理并将最终结果通知给客户端应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值