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

方面从多个日期角度:

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

创建表的脚本如下(存储过程的创建过程中有一步操作是向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存储过程生成日期维度的更多相关文章

  1. Sqlserver存储过程生成日期维度

    话不多说,之前已经有一篇日志是利用oracle的存储过程生成日期维度表,接下来我们就用sqlserver来实现这个操作,如下面的步骤所示 1:创建日期维度表(Dim_time) USE [DW] GO ...

  2. C# 生成日期维度值

    1. 时间维度表结构 /*==============================================================*/ /* Table: dim_date_day ...

  3. SQL生成日期维度(到小时)

    #建表语句: CREATE TABLE [dbo].[Dim_日期3]( ) NOT NULL, [年] [int] NULL, ) NULL, ) NULL, ) NULL, ) NULL, ) N ...

  4. DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)

    DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★★(5星) 这个时间系列想 ...

  5. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  6. Oracle 存储过程异常处理

    Oracle 存储过程异常处理 1.异常的优点    如果没有异常,在程序中,应当检查每个命令的成功还是失败,如  BEGIN  SELECT ...  -- check for ’no data f ...

  7. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  8. Cognos两种建模工具对于复杂日期维度的处理比较(下)

    本文继Cognos两种建模工具对于复杂日期维度的处理比较(上)之后将介绍一下Cognos中建模工具Transform对复杂日期维度的处理. 二:Transform建模对于复杂日期维度的处理 为了书写效 ...

  9. Cognos两种建模工具对于复杂日期维度的处理比较(上)

    众所周知,在数据仓库中,日期维度是相当重要的.对数据分析的过程中可以从不同的角度去分析,比如按照下面的日期层次去分析数据. 年-季度-月-日 年-月-日 年-周-日 本示例将利用简单的商品销售分析的d ...

随机推荐

  1. python lambda简单介绍

    python lambda 在python中,如果想要创建函数需要使用关键字def,而如果想要创建匿名函数,就需要使用lambda. lambda创建的函数和def创建的函数有什么区别? def创建的 ...

  2. event使用说明和DHTML参数属性

    event 对象 代表事件状态,如事件发生的元素,键盘状态,鼠标位置和鼠标按钮状态. DHTML元素属性列表 属性 描述 abstract 使用 event 对象获取高级流重定向器(ASX)文件中项目 ...

  3. 常用SQL脚本记录一

    20.SUM()和 列+ 统计结果时:如果列里有一行为null,SUM函数会忽略它:如果+,则结果集也为NULL了 19 SUBSTRING (expression,startIndex, endIn ...

  4. KMP 解决串的模式匹配问题

    初学KMP的时候,一直不得要领.后来学习AC自动机的时候,一下子明白了KMP实际上是AC自动机的特殊情况. 首先贴三段代码,一组是回溯法,暴力求解,另外两个是KMP串模式匹配 /* 回溯法字符串匹配算 ...

  5. 鸟哥的私房菜:Linux磁盘与文件系统原理

    1 硬盘物理组成     //原理 磁头负责读写     磁道(硬盘同半径的一圈) 磁柱(所有盘磁道叠加起来的柱)     扇区(2条半径将磁道分开的一个扇形区域,是磁盘的最小存储单位) ------ ...

  6. Caffe2(3)----下载现成的模型并使用

    Caffe2训练好的模型可在Model Zoo下载,下载的命令很简单,接下来以下载和使用squeezenet为例,进行简单说明. 1.浏览可下载的模型 已有模型都放在github上,地址:https: ...

  7. Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务系统的集成

    集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...

  8. Linux 内核编译步骤及配置详解

    前言    Linux内核是操作系统的核心,也是操作系统最基本的部分. Linux内核的体积结构是单内核的.但是他充分采用了微内核的设计思想.使得虽然是单内核.但工作在模块化的方式下.并且这个模块可以 ...

  9. Android字体简述

    Android是一个典型的Linux内核的操作系统.在Android系统中,主要有DroidSans和DroidSerif两大字体阵营,从名字就可以看出来,前者是无衬线字体,后者是衬线字体.具体来说, ...

  10. Smali语法简单介绍

    Smali语言其实就是Davlik的寄存器语言: Smali语言就是android的应用程序.apk通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件,文件的展示 ...