先贴代码,再进行拆解
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;