博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle存储过程生成日期维度
阅读量:5101 次
发布时间:2019-06-13

本文共 2664 字,大约阅读时间需要 8 分钟。

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

方面从多个日期角度:

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

创建表的脚本如下(存储过程的创建过程中有一步操作是向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;BEGINadddays := 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,截止目前,日期维度已经生成。

 

 

 

 

posted on
2014-03-11 15:27 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/wxjnew/p/3594044.html

你可能感兴趣的文章
Python内置函数(29)——help
查看>>
getElement的几中属性介绍
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
digitalocean --- How To Install Apache Tomcat 8 on Ubuntu 16.04
查看>>
【题解】[P4178 Tree]
查看>>
cer证书签名验证
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
QML学习笔记之一
查看>>
App右上角数字
查看>>
小算法
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
IOS-图片操作集合
查看>>