存储过程中遍历天数

原创 2007年09月18日 20:04:00

 好久没写东西了,今天写了个遍历天数的存储过程,放出来共享一下。

declare
SqlString  VARCHAR2(32767); 
tempDate    NUMBER(8,0);
lnm_DateFrom     NUMBER(8,0);                         -- 开始时间
lnm_DateTo       NUMBER (8,0);                        -- 结束时间

begin   
      lnm_DateFrom:=20070305;
       lnm_DateTo:=20070308;
      
  SqlString :=  'SELECT
                  aa.YearMonth as GetDataDate, bb.DayAverageValue
              FROM
                  (
              ';
             
              tempDate := Floor(lnm_DateFrom);
              WHILE (tempDate<=Floor(lnm_DateTo))
              LOOP
                  SqlString := SqlString || ' SELECT ' || tempDate || ' AS YearMonth FROM DUAL';
                  IF (tempDate <> Floor(lnm_DateTo)) THEN
                      SqlString := SqlString || ' UNION ALL '||chr(10);
                  END IF;        
                if (TO_DATE(tempDate) = last_day(TO_DATE(tempDate)))THEN
                  SELECT TO_NUMBER(TO_CHAR(ADD_MONTHS(TO_DATE(tempDate),1),'yyyymm'))||'01' INTO tempDate FROM dual;
                 
                  else
                        tempDate :=tempDate+1;     
                          END IF;
              END LOOP;              
             
           SqlString := SqlString ||
              '
              ) aa,
              (
                  SELECT
                     A. 时间字段 AS GetDataDate
                     ,A.字段2 AS DayAverageValue
                     ,A.字段3 AS DayMaxValue
                     ,A.字段4 AS DayMinValue
                  FROM
                      aire.表名 A
                  WHERE
                      A.时间字段 BETWEEN '|| lnm_DateFrom ||' AND '|| lnm_DateTo ||'
                      AND A.字段CD = '||1314||'
                      AND A.CD = '||121||'
                      
              ) bb
              WHERE
                  aa.YearMonth = bb.GetDataDate(+)
              ORDER BY aa.YearMonth
              ' ;      
              
dbms_output.put_line(SqlString);      

end;

--其实时间的循环很简单,关键就下面两句

 if (TO_DATE(tempDate) = last_day(TO_DATE(tempDate)))THEN   --判断是不是一个月的最后一天
                  SELECT TO_NUMBER(TO_CHAR(ADD_MONTHS(TO_DATE(tempDate),1),'yyyymm'))||'01' INTO tempDate FROM dual;  --生成下个月1日的时间
                 
                  else
                        tempDate :=tempDate+1;      --日期增加1天
                          END IF;

 

已经测试通过!

数据结构之图(存储结构、遍历)

一、图的存储结构 1.1 邻接矩阵     图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。     设图G有n个顶点,...
  • qq_26399665
  • qq_26399665
  • 2016年09月19日 20:36
  • 315

遍历两个日期之间的所有日期

遍历两个日期之间的所有日期,用于学习
  • sharonyshi
  • sharonyshi
  • 2015年03月02日 15:56
  • 437

在MySql存储过程中使用事务

在MySql存储过程中使用事务现有如下的存储过程,执行插入操作。其中bill表中id为primary key,其它为字段为普通字段,没加任何索引与约束,多余的省略,不予展示。DROP PROCEDUR...
  • Revivedsun
  • Revivedsun
  • 2017年03月30日 00:50
  • 736

存储过程中简单事务书写方法

只有一个事务。开头用begin transaction, 结尾用commit transaction 或者rollback transaction. 示例如下 --实现插入一条记录,rollback最...
  • yilin54
  • yilin54
  • 2014年01月19日 09:21
  • 841

存储过程使用DDL语句

-- procedure 中使用 DDL 语句需要将DML封装存入string中,否则会出现异常 -- http://www.cnblogs.com/cici-new/p/4029895.html /...
  • u010452908
  • u010452908
  • 2016年07月10日 21:37
  • 738

pl/sql存储过程的递归调用,树形数据的展示

--pl/sql的树状结构的存储与展示 drop table article; create table article( id number primary key, --id cont v...
  • u010689306
  • u010689306
  • 2016年06月01日 00:46
  • 1616

SQLserver 在存储过程中创建函数,创建视图

alter PROCEDURE usp_sumgoods(@supplierid VARCHAR(50)) as BEGIN if exists (select * from dbo.sysobjec...
  • u012725119
  • u012725119
  • 2013年12月21日 23:57
  • 1396

图的存储与遍历

一、图的主要存储方式主要有两种: 1.邻接表表示; 2.数组表示; 其中邻接表适用于稀疏图,数组表示法适用于稠密图。由邻接表表示延伸开的还有十字链表法等。本文利用邻接表表示图,实现图的存储与遍历...
  • u010056149
  • u010056149
  • 2015年01月25日 14:46
  • 907

图的存储结构及遍历算法

一、图的存储结构 1.1 邻接矩阵     图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。     设图G有n个顶点,...
  • dageda1111
  • dageda1111
  • 2014年03月09日 16:59
  • 1376

二叉树存储及遍历

点击打开链接←原文链接 二叉树存储及遍历 1、树的存储:   注意:树的深度是从根节点开始(其深度为1)自顶向下逐层累加的,而高度是从叶节点开始(其高度为1)自底向...
  • wa123579
  • wa123579
  • 2017年02月15日 10:27
  • 170
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:存储过程中遍历天数
举报原因:
原因补充:

(最多只允许输入30个字)