Oracle存储过程生成日期维度
在数据仓库的创建过程中,往往需要创建日期维度来为以后的数据分析来服务。
方面从多个日期角度:
如:年-月-日,年-季度-月-日,年-周-日
创建表的脚本如下(存储过程的创建过程中有一步操作是向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,截止目前,日期维度已经生成。
Oracle存储过程生成日期维度的更多相关文章
- Sqlserver存储过程生成日期维度
话不多说,之前已经有一篇日志是利用oracle的存储过程生成日期维度表,接下来我们就用sqlserver来实现这个操作,如下面的步骤所示 1:创建日期维度表(Dim_time) USE [DW] GO ...
- C# 生成日期维度值
1. 时间维度表结构 /*==============================================================*/ /* Table: dim_date_day ...
- SQL生成日期维度(到小时)
#建表语句: CREATE TABLE [dbo].[Dim_日期3]( ) NOT NULL, [年] [int] NULL, ) NULL, ) NULL, ) NULL, ) NULL, ) N ...
- DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)
DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★★(5星) 这个时间系列想 ...
- Oracle存储过程中异常Exception的捕捉和处理
Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...
- Oracle 存储过程异常处理
Oracle 存储过程异常处理 1.异常的优点 如果没有异常,在程序中,应当检查每个命令的成功还是失败,如 BEGIN SELECT ... -- check for ’no data f ...
- 项目中oracle存储过程记录——经常使用语法备忘
项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...
- Cognos两种建模工具对于复杂日期维度的处理比较(下)
本文继Cognos两种建模工具对于复杂日期维度的处理比较(上)之后将介绍一下Cognos中建模工具Transform对复杂日期维度的处理. 二:Transform建模对于复杂日期维度的处理 为了书写效 ...
- Cognos两种建模工具对于复杂日期维度的处理比较(上)
众所周知,在数据仓库中,日期维度是相当重要的.对数据分析的过程中可以从不同的角度去分析,比如按照下面的日期层次去分析数据. 年-季度-月-日 年-月-日 年-周-日 本示例将利用简单的商品销售分析的d ...
随机推荐
- android viewHolder static 静态
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 不是静态内部类 会 持有 外部类的 引用. 就像经常自定义的 适配器 类 作为内部类 ...
- wpf企业应用之SelectButton(用于列表页之类的选择)
在企业级应用中,通常我们会遇到这样的需求,需要点击一个按钮选择列表中的一项或者多项,然后将结果显示到按钮中.这里我给自己的控件命名为SelectButton,具体效果见 wpf企业级开发中的几种常见业 ...
- Linux免密登录
ssh连接上服务器 ssh -p 端口 用户名@ip地址 获取本地的pub ssh key cd ~/.ssh vi id_rsa.pub 拷贝里面的内容 将拷贝的内容放到服务器的authorized ...
- (Nginx和PHP下)URL重写,TP实现URL重写
UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址. 优点 一:提高安全性,可以有效的避免一些参数名.ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话 ...
- poj 1509
求一个字符串在旋转置换群下最小字典表示. 用的是后缀数组(后缀自动机还是再听听jason_yu讲讲吧,关于right集合的部分还有问题) 最小表示法的思想很有好(判断两个对象在某一置换群划分下,是否等 ...
- 使用HAproxy如何实现web站点的动静分离
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别 适用于那些负载特大的web站点,这些站点通常 ...
- 2017微软 MVP 数据实践技术活动日(北京站)
Power BI | 交互式数据可视化 BI 工具 EXCEL BI :无所不能的业务数据分析利器 EXCEL +POWERBI=EXCEL BI https://edu.hellobi.com/co ...
- PyQt5 各种菜单实现
# -*- coding: utf-8 -*- # Created by PCITZDF on 2018/4/8 15:36. # FileName: menuandtools.py import s ...
- win7无线网络共享
一.最简单的方法: 1.使用360安全卫士 2.安装一个驱动人生 二.手工设置,参考:http://www.jb51.net/os/windows/63472.html
- 算法:快速排序(Quick Sort)
算法定义 目前学习是五种排序(冒泡.插入.选择.合并.快速)中,快速排序是最让我喜欢的算法(因为我想不到),其定义如下: 随机的从数组中选择一个元素,如:item. 对数组进行分区,将小于等于 ite ...