oracle:如何用sql生成日历
BI分析中,经常需要将事实表与时间维度表关联起来,按年/月/日来逐层展示,常用的做法是创建一张日历表,结构类似如下:
create table T_BAS_CALENDAR
(
d_year NUMBER(4) not null,
d_month NUMBER(2) not null,
d_day NUMBER(2) not null
);
comment on table T_BAS_CALENDAR
is '日历表';
comment on column T_BAS_CALENDAR.d_year
is '年';
comment on column T_BAS_CALENDAR.d_month
is '月';
comment on column T_BAS_CALENDAR.d_day
is '日';
alter table T_BAS_CALENDAR
add constraint PK_BAS_CALENDAR primary key (D_YEAR, D_MONTH, D_DAY);
但是如何向这张表批量插入日历数据,方法就很多了,下面是仅用SQL语言生成日历的参考方法:
create or replace procedure P_IMPORT_CALENDAR(p_year_start number,
p_year_end number) is
cmonth integer;
cyear integer;
cday integer;
day_first integer;
day_last integer;
begin
--生成从p_year_start到p_year_end的所有日历 created by yjmyzz@126.com 2015-04-27 --firstly,delete history records
delete from T_BAS_CALENDAR where d_year between p_year_start and p_year_end;
for cyear in p_year_start .. p_year_end loop
for cmonth in 1 .. 12 loop
--get first-day of Month
select to_number(cyear || lpad(cmonth, 2, '') || '', '')
into day_first
from dual;
--last-day of Month
select to_number(to_char(add_months(to_date(day_first, 'yyyyMMdd'), 1) - 1,
'yyyyMMdd'),
'')
into day_last
from dual;
for cday in day_first .. day_last loop
--insert to table
INSERT INTO T_BAS_CALENDAR
(D_YEAR, D_MONTH, D_DAY)
VALUES
(CYEAR, CMONTH, SUBSTR(cday, 7));
end loop;
end loop;
end loop;
commit;
end P_IMPORT_CALENDAR;

oracle:如何用sql生成日历的更多相关文章
- oracle如何用sql查看触发器?
ORACLE查出表所有的触发器及触发器详细信息 一.查all_triggers表得到trigger_name Sql代码 select trigger_name from all_triggers w ...
- Oracle DBA常用SQL
监控SQL 1.监控事例的等待: select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,c ...
- c#保存datagridview中的数据时报错 “动态SQL生成失败。找不到关键信息”
ilovejinglei 原文 C#中保存datagridview中的数据时报错"动态SQL生成失败.找不到关键信息" 问题描述 相关代码 using System; us ...
- Oracle 11g实时SQL监控 v$sql_monitor
Oracle 11g实时SQL监控: 前面提到,在Oracle Database 11g中,v$session视图增加了一些新的字段,这其中包括SQL_EXEC_START和SQL_EXEC_ID, ...
- oracle数据处理之sql*loader(一)
SQL*Loader是oracle提供的可以从多种平面文件中向数据库中加载数据的工具,它比较适合业务分析类型数据库(数据仓库);使用sqlldr工具可以在很短的时间内向数据库中加载大量的数据,像把制作 ...
- 如何用hypermesh生成包含interface的流体网格
在计算气动声学的时候,有些情况是需要我们提取流体计算的结果作为声学分析的边界条件,但是,有些流体网格因为物理模型的问题需要我们设定interface,恰恰你是机械,对流体了解一点,又不想花费太多时间来 ...
- Oracle中PL/SQL的执行部分和各种流程控制
Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...
- 如何用.NET生成二维码?
二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技术研究方面已研制出多种码制,常见的有P ...
- 如何用SQL命令行工具删除dedecms指定id文章
用dedecms采集时标题字段设置错了,出现了注释符号<!---->,导致后台的文章列表出现错误,也无法直接从列表中删除,可以远程登录数据库去操作,这个相对比较麻烦,想着直接从后台的SQL ...
随机推荐
- 教你怎么检测Heartbleed OpenSSL漏洞
Heartbleed错误是一个严重的漏洞.这个弱点可以窃取信息,在正常情况下,由SSL / TLS加密保护互联网.Heartbleed错误允许任何人在互联网上阅读系统的内存保护脆弱的OpenSSL的软 ...
- 1.10 基础知识——GP3.1 制度化 & GP3.2 收集改进信息
摘要: GP3.1是要求建立组织级的关于该过程的制度.标准.模版等全套体系,要求覆盖该PA所有的SP和GP.GP3.2 体现的是持续改进,每个过程都应该收集相应的改进信息. 正文: GP3.1 Est ...
- php示例代码之读取文件
php读取文件 1 2 3 4 5 6 7 8 $sourceString=''; $fp = @fopen($filename, "r"); while($line = ...
- Maven项目无法引入 Maven Dependencies Libraries 问题
昨天在check下来maven项目之后一些配置好了,就是下载不是maven 依赖库,后面再网上找到如下解决方案. 在.classpath文件中加入如下代码就好了. <classpathentry ...
- What every programmer should know about memory 笔记
What every programmer should know about memory, Part 1(笔记) 每个程序员都应该了解的内存知识[第一部分] 2.商用硬件现状 现在硬件的 ...
- 使用 xtrabackup 进行MySQL数据库物理备份
0. xtrabackup的功能 能实现的功能: 非阻塞备份innodb等事务引擎数据库. 备份myisam表会阻塞(需要锁). 支持全备.增量备份.压缩备份. 快速增量备份(xtradb,原理类似于 ...
- MySQL 调优基础(五) Linux网络
1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.而实际的Linux网络层协议是参照了OSI标准,但 ...
- Linux IPC POSIX 共享内存
模型 #include <unistd.h> //for fstat() #include <sys/types.h> //for fstat() #include <s ...
- mongo日志切割脚本
两种mongo日志切割脚本 vim /etc/logrotate.d/mongodb /home/mongodb/mongolog/mongod.log { daily rotate 7 compre ...
- RedHat 6.2 Linux修改yum源免费使用CentOS源
在没有光盘的情况,需要安装软件包,就要用到共网的yum源来安装了. RedHat linux 默认是安装了yum软件的,但是由于激活认证的原因让redhat无法直接进行yum安装一些软件,如果我们需要 ...