通过ORACLE函数,生成DIM_DATE表(自用)

先贴代码,再进行拆解

CREATE OR REPLACE PROCEDURE SP_DIM_DATE(BEGIN_DATE IN VARCHAR2,
                                                    END_DATE IN VARCHAR2) IS
  /*
  CREATE_TIME_DIMENSION: 生成时间维数据
  BEGIN_DATE: 起始时间
  END_DATE:结束时间
  */
DATE_D DATE;----日期格式
V_DATE VARCHAR2(10);
V_YEAR VARCHAR2(10);
V_QUARTER VARCHAR2(10);
V_MONTH VARCHAR2(10);
V_WEEK VARCHAR2(10);
V_DAY VARCHAR2(10);
ADD_DAYS INT;
BEGIN

delete from  DIM_DATE;

ADD_DAYS := 1 ;
DATE_D := TO_DATE(BEGIN_DATE,'yyyy-MM-dd');

WHILE (DATE_D <= TO_DATE(END_DATE,'yyyy-MM-dd'))
LOOP
   --V_DATE := TO_NUMBER(TO_CHAR(DATE_D,'yyyymmdd'));--KEY值
   V_YEAR:= TO_CHAR(DATE_D, 'yyyy');--年
   V_QUARTER := TO_CHAR(DATE_D, 'q');--季度
   V_MONTH:=TO_CHAR(DATE_D, 'mm');--月份
   V_WEEK:= TO_CHAR(DATE_D,'iw');--年的第几周
   V_DAY:= TO_CHAR(DATE_D, 'dd');--日

  INSERT INTO DIM_DATE("D_DATE","D_YEAR","D_QUARTER","D_MONTH","D_WEEK","D_DAY")
                      VALUES(TO_CHAR(DATE_D, 'yyyy-MM-dd'),V_YEAR,V_QUARTER,V_MONTH,V_WEEK,V_DAY);

   DATE_D :=  DATE_D + ADD_DAYS;
END LOOP;

END SP_DIM_DATE;

一、创建DIM_DATE数据库表

D_DATE字段是VARCHAR2类型

二、使用创建存储过程

CREATE OR REPLACE PROCEDURE SP_DIM_DATE (BEGIN_DATE IN VARCHAR2,
                                                    END_DATE IN VARCHAR2) IS

三、声明变量名和变量类型

DATE_D DATE;
V_DATE VARCHAR2(10);
V_YEAR VARCHAR2(10);
V_QUARTER VARCHAR2(10);
V_MONTH VARCHAR2(10);
V_WEEK VARCHAR2(10);
V_DAY VARCHAR2(10);
ADD_DAYS INT;

BEGIN

四、执行体

(一)清空DIM_DATE数据库表

DELETE FROM DIM_DATE

(二)定义ADD_DAYS = 1(每次加1),DATE_D是BEGIN_DATE转成日期形式(BEGIN_DATE是VARCHAR类型)

ADD_DAYS := 1 ;
DATE_D := TO_DATE(BEGIN_DATE,'yyyy-MM-dd');

(三)当DATE_D小于END_DATE时,执行LOOP

WHILE (DATE_D <= TO_DATE(END_DATE,'yyyy-MM-dd'))
LOOP
   --V_DATE := TO_NUMBER(TO_CHAR(DATE_D,'yyyymmdd'));--KEY值
   V_YEAR:= TO_CHAR(DATE_D, 'yyyy');--年
   V_QUARTER := TO_CHAR(DATE_D, 'q');--季度
   V_MONTH:=TO_CHAR(DATE_D, 'mm');--月份
   V_WEEK:= TO_CHAR(DATE_D,'iw');--年的第几周,以周一为一周的开始
   V_DAY:= TO_CHAR(DATE_D, 'dd');

将值插入DIM_DATE表  

INSERT INTO DIM_DATE("D_DATE","D_YEAR","D_QUARTER","D_MONTH","D_WEEK","D_DAY")----插入字段
                      VALUES(TO_CHAR(DATE_D, 'yyyy-MM-dd'),V_YEAR,V_QUARTER,V_MONTH,V_WEEK,V_DAY);

   DATE_D :=  DATE_D + ADD_DAYS;
END LOOP;

(四)结束执行

END SP_DIM_DATE;

最终结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值