存储过程中遍历天数

原创 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;

 

已经测试通过!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

sqlserver存储过程中利用游标遍历结果集简单示例及查询数据库时间

本实例用的是sqlserver2005   在存储过程中遍历结果,和查询数据库中所有 存储过程名称 加以处理以文本形式输出 源码: drop procedure findName creat...
  • NN955
  • NN955
  • 2012-09-27 14:47
  • 14697

DB2(Procedure)存储过程遍历循环!

由于有时候一些复杂的业务逻辑将要通过存储过程的循环语句进行处理;以下列出2种DB2存储过程的循环语句,方便以后的查看并使用! 本人推荐第一种方式的使用,最大的优点就是比较直观;在需要操作很多字段...

MySql存储过程—游标使用(Cursor),(遍历)

1、游标的作用及属性 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作;游标有下面这些属性:     a、游标是只读的,也就是不能更新它;     b、游标是不...

存储过程中时间的处理

  • 2010-12-06 16:29
  • 17KB
  • 下载

存储过程中使用事务

一、存储过程中使用事务的简单语法      在存储过程中使用事务时非常重要的,使用数据可以保持数据的关联完整性,在Sql server存储过程中使用事务也很简单,用一个例子来说明它的语法格式:代码 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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