Oracle存储过程生成日期维度

浏览: 2435

在数据仓库的创建过程中,往往需要创建日期维度来为以后的数据分析来服务。

方面从多个日期角度:

如:年-月-日,年-季度-月-日,年-周-日

创建表的脚本如下(存储过程的创建过程中有一步操作是向time_dimension表中插入数据,所以首先需要创建好此表)

复制代码

create table TIME_DIMENSION
(
the_date
NUMBER not null,
date_name NVARCHAR2(
15),
the_year
NUMBER,
year_name NVARCHAR2(
10),
the_quarter
VARCHAR2(10),
quarter_name NVARCHAR2(
10),
the_month
NUMBER,
month_name NVARCHAR2(
10),
the_week
NUMBER,
week_name NVARCHAR2(
10),
week_day NVARCHAR2(
10)
)
tablespace TBS_COGNOS
pctfree
10
initrans
1
maxtrans
255
storage
(
initial
64
next 1
minextents
1
maxextents unlimited
);

复制代码

 

存储过程脚本如下

复制代码

CREATE OR REPLACE PROCEDURE SP_CREATE_TIME_DIMENSION(begin_date in varchar2,
end_date
in varchar2) is

/*SP_CREATE_TIME_DIMENSION: 生成时间维数据
begin_date: 起始时间
end_date:结束时间
*/
dDate date;
v_the_date
number;
v_the_year
varchar2(4);
v_the_quarter
varchar2(2);
v_the_month
varchar2(10);
v_the_month2
varchar2(2);
v_the_week
varchar2(2);
v_the_day
varchar2(10);
v_the_day2
varchar2(2);
v_week_day nvarchar2(
10);

adddays
int;
BEGIN
adddays :
= 1 ;
dDate :
= to_date(begin_date,'yyyymmdd');

WHILE (dDate <= to_date(end_date,'yyyymmdd'))
loop
v_the_date :
= to_number(to_char(dDate,'yyyymmdd'));--key值
v_the_year:= to_char(dDate, 'yyyy');--
v_the_quarter := to_char(dDate, 'q');--季度
v_the_month:=to_char(dDate, 'mm');--月份(字符型)
v_the_month2:=to_number(to_char(dDate, 'mm'));--月份(数字型)
v_the_day:=to_char(dDate, 'dd');--日(字符型)
v_the_day2:=to_char(dDate, 'dd');
v_the_week:
= to_char(dDate,'fmww');--年的第几周
v_week_day := to_char(dDate, 'day'); --星期几


insert into time_dimension(the_date,date_name,the_year,year_name,
the_quarter,quarter_name,the_month,
month_name,the_week,week_name,week_day)
values(v_the_date,v_the_year||''||v_the_month2||''||v_the_day2||'',v_the_year,v_the_year||'',
v_the_year
||'Q'||v_the_quarter,v_the_year||''||v_the_quarter||'季度',to_number(v_the_year||v_the_month),
v_the_year
||''||v_the_month2||'',v_the_week,''||v_the_week||'',
v_week_day);

dDate :
= dDate + adddays;
END loop;
end SP_CREATE_TIME_DIMENSION;

复制代码

 

 

OK,存储过程创建完毕,下面我们需要传参并且只需存储过程,问题来了,如何通过PLSQL执行存储过程?之前都是在PLSQL中创建 SQL 窗口来执行procedure

结果报错,其实应该创建 命令窗口 来执行procedure

如下图:

命令窗口的执行脚本如下:

复制代码

SQL> exec SP_CREATE_TIME_DIMENSION(20140101,20140630);

PL
/SQL procedure successfully completed

SQL
> commit;

Commit complete

SQL
> select * from time_dimension;

复制代码

OK,截止目前,日期维度已经生成。

推荐 0
本文由 kingwang 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册