度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1253|回复: 3
打印 上一主题 下一主题

[分享] oracle的loop等循环语句的几个用法小例子

[复制链接]

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
跳转到指定楼层
楼主
发表于 2020-2-21 18:14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. --loop循环用法 (输出1到10)
  2. declare v_num number(2) := 0;
  3. begin
  4.   loop
  5.     v_num := v_num + 1;
  6.     exit when v_num > 10;
  7.     --上面退出循环也可以用下面3行
  8.      /* if(v_num > 9) then
  9.         exit;
  10.      end if;*/
  11.     dbms_output.put_line(v_num);
  12.   end loop;
  13. end;

  14. --while loop循环用法 (输出1到10)
  15. declare v_num number(2) := 0;
  16. begin
  17.   while v_num < 10 loop
  18.      v_num := v_num + 1;
  19.      dbms_output.put_line(v_num);
  20.   end loop;
  21. end;

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

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


  36. ---个循环打印某个月日历例子
  37. declare v_days number(2);
  38.         v_firstday number(2);
  39.         v_result varchar2(4000);
  40.         v_d varchar(100);
  41.         v_month date;
  42. begin
  43.    v_month := to_date('20170301','yyyymmdd');
  44.    v_result := to_char(v_month,'yyyy') || '年' || to_char(v_month,'mm') || '月' || chr(10) ||  '日 一 二 三 四 五 六' || chr(10);
  45.    select to_char(last_day(v_month), 'dd') into v_days from dual;--当月多少天
  46.    select to_char(trunc(v_month, 'mm'),'d') into v_firstday from dual;--当月第1天是星期几:1-7   
  47.    --1号所在星期几的之前每一天补3个空格
  48.    for v_week in 1 .. v_firstday - 1  loop
  49.       exit when v_firstday < 2;
  50.       v_result := v_result || '   ';     
  51.    end loop;
  52.    for v_date in 1 .. v_days loop
  53.       v_d := v_date;
  54.       if(length(v_date) = 1) then
  55.          v_d :=  ' '||v_date ;               
  56.       end if;
  57.       v_result := v_result || v_d || ' ';   
  58.       if(mod(v_date + v_firstday, 7) = 1) then
  59.           v_result := v_result || ' ' || chr(10);      
  60.       end if;
  61.    end loop;
  62.    dbms_output.put_line(v_result);
  63. end;
  64. /*
  65. 运行结果:

  66. 2017年03月
  67. 日 一 二 三 四 五 六
  68.           1  2  3  4
  69. 5  6  7  8  9 10 11
  70. 12 13 14 15 16 17 18
  71. 19 20 21 22 23 24 25
  72. 26 27 28 29 30 31
  73. */
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
沙发
发表于 2020-2-22 14:34:48 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
板凳
 楼主| 发表于 2020-2-22 17:40:16 | 只看该作者
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
地板
发表于 2020-2-23 19:04:51 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-24 10:47 , Processed in 0.141069 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表