通过编写存储过程填充日期维表
这种方法可以生成时间段任意长的日期维表数据。
首先创建日期维表:
create table DIM_DATE_T ( F_DATE
DATE , F_YEAR
VARCHAR2(10), F_MONTH
VARCHAR2(10), F_DAY
VARCHAR2(10), F_WEEK
VARCHAR2(20) ) |
其次创建用于生成数据的存储过程:
create or replace procedure fill_dim_date_t_p(start_date
in char ,
end_date in char )
as v_counter
number := 0; v_max
number := 0; begin execute immediate
'truncate
table dim_date_t' ; v_max
:= to_number(TO_DATE(end_date, 'yyyy-mm-dd' )-TO_DATE(start_date,
'yyyy-mm-dd' )); loop insert into dim_date_t
(F_DATES,F_YEAR,F_MONTH,F_DAY,F_WEEK) values ( TO_DATE(start_date,
'yyyy-mm-dd' )+v_counter, to_char(TO_DATE(start_date,
'yyyy-mm-dd' )
+ v_counter, 'yyyy' ), to_char(TO_DATE(start_date,
'yyyy-mm-dd' )
+ v_counter, 'mm' ), to_char(TO_DATE(start_date,
'yyyy-mm-dd' )
+ v_counter, 'dd' ), to_char(TO_DATE(start_date,
'yyyy-mm-dd' )
+ v_counter, 'day' ) ); exit
when v_counter
>= v_max; v_counter
:= v_counter+1; end loop; commit ; end fill_dim_date_t_p; |