拉链表的展开算法_如何求展开式的系数

拉链表的展开算法_如何求展开式的系数在做数据仓库项目的过程中,有时候可能也会根据历史拉链表,展开为每天全量表;相当于一个还原的过程,即构建拉链表的反过程。1、建表及插入测试数据语句 –建表语句–生成EDW_T00_H表(历史拉链表)–CreatetablecreatetableEDW_T00_H(IDVARCHAR2(2)notnull,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在做数据仓库项目的过程中,有时候可能也会根据历史拉链表,展开为每天全量表;相当于一个还原的过程,即构建拉链表的反过程。

1、 建表及插入测试数据语句

  1. --建表语句  
    --生成EDW_T00_H表(历史拉链表)  
    -- Create table  
    create table EDW_T00_H  
    (  
      ID         VARCHAR2(2) not null,  
      START_DATE DATE not null,  
      STATUS     VARCHAR2(2),  
      END_DATE   DATE  
    );  
    
    -- Add comments to the table   
    comment on table EDW_T00_H  
      is '历史拉链表';  
    -- Add comments to the columns   
    comment on column EDW_T00_H.ID  
      is 'ID';  
    comment on column EDW_T00_H.START_DATE  
      is '开始日期';  
    comment on column EDW_T00_H.STATUS  
      is '状态';  
    comment on column EDW_T00_H.END_DATE  
      is '结束日期';  

     

    -- Create/Recreate primary, unique and foreign key constraints   
    alter table EDW_T00_H  
      add constraint EDW_T00_ID primary key (ID, START_DATE);  
    --生成EDW_T00_ALL表(历史拉链展开后的表)  
    -- Create table  
    create table EDW_T00_ALL  
    (  
      ID        VARCHAR2(2) not null,  
      DATA_DATE DATE not null,  
      STATUS    VARCHAR2(2) not null  
    );  
    -- Add comments to the table   
    comment on table EDW_T00_ALL  
      is '历史拉链展开后的表';  
    -- Add comments to the columns   
    comment on column EDW_T00_ALL.ID  
      is 'ID';  
    comment on column EDW_T00_ALL.DATA_DATE  
      is '数据日期';  
    comment on column EDW_T00_ALL.STATUS  
      is '状态';  

     

    --插入历史表测试数据  
    insert into edw_t00_H (ID, START_DATE, STATUS, END_DATE)  
    values ('3', to_date('01-12-2007', 'dd-mm-yyyy'), 'N', to_date('01-12-2009', 'dd-mm-yyyy'));  
    insert into edw_t00_H (ID, START_DATE, STATUS, END_DATE)  
    values ('3', to_date('01-12-2009', 'dd-mm-yyyy'), 'Y', to_date('16-12-2010', 'dd-mm-yyyy'));  
    insert into edw_t00_H (ID, START_DATE, STATUS, END_DATE)  
    values ('1', to_date('01-12-2010', 'dd-mm-yyyy'), 'Y', to_date('16-12-2010', 'dd-mm-yyyy'));  
    insert into edw_t00_H (ID, START_DATE, STATUS, END_DATE)  
    values ('2', to_date('01-12-2010', 'dd-mm-yyyy'), 'N', to_date('12-12-2010', 'dd-mm-yyyy'));  
    COMMIT;  

2、 插入系统维护日期表

主要用来取ROWNUM供第3步操作

--插入系统维护时间  
CREATE TABLE SYS_MATIAN_DATE(DATE_COL DATE);  
  
DECLARE  
  V_DATE     DATE := TO_DATE('20080101', 'YYYYMMDD');  
  V_DATE_MAX DATE;  
BEGIN  
  EXECUTE IMMEDIATE 'TRUNCATE TABLE SYS_MATIAN_DATE';  
  SELECT SYSDATE INTO V_DATE_MAX FROM DUAL;  
  WHILE V_DATE <= V_DATE_MAX LOOP  
    INSERT INTO SYS_MATIAN_DATE  
      SELECT V_DATE FROM DUAL;  
    V_DATE := V_DATE + 1;  
    COMMIT;  
  END LOOP;  
END;  
  
SELECT * FROM SYS_MATIAN_DATE;  

3、 实现拉链表展开的代码

  1. DECLARE  
      CURSOR LSLL_ID IS  
        SELECT ID,  
               START_DATE,  
               STATUS,  
               DECODE(END_DATE,  
                      TO_DATE('30001231', 'YYYYMMDD'),  
                      SYSDATE,      --TO_DATE(P_ETLDATE, 'YYYYMMDD'),  
                      END_DATE) END_DATE  
          FROM EDW_T00_H;  
      V_ID         VARCHAR2(1000);  
      V_START_DATE DATE;  
      V_END_DATE   DATE;  
      V_DATA_DATE  DATE;  
      V_STATUS     VARCHAR2(2);  
    BEGIN  
      BEGIN  
        EXECUTE IMMEDIATE 'TRUNCATE TABLE EDW_T00_ALL';  
        OPEN LSLL_ID;  
        LOOP  
          FETCH LSLL_ID  
            INTO V_ID, V_START_DATE, V_STATUS, V_END_DATE;  
          EXIT WHEN LSLL_ID%NOTFOUND;  
          INSERT INTO EDW_T00_ALL  
            (ID, DATA_DATE, STATUS)  
            SELECT V_ID, V_START_DATE + ROWNUM - 1 AS DATA_DATE, V_STATUS  
              FROM SYS_MATIAN_DATE  
             WHERE V_START_DATE + ROWNUM - 1 < V_END_DATE;  
          COMMIT;  
        END LOOP;  
        CLOSE LSLL_ID;  
      END;  
    END;  

4、 总结说明

第3步中,游标的START_DATE、END_DATE要根据实际情况,灵活变通;代码的EXECUTE IMMEDIATE 'TRUNCATE TABLE EDW_T00_ALL';需要不需要,根据实际情况来定;第2步中生成数据日期维护表,主要用来第3步

SELECT V_ID, V_START_DATE + ROWNUM - 1 AS DATA_DATE, V_STATUS

          FROM SYS_MATIAN_DATE

         WHERE V_START_DATE + ROWNUM - 1 < V_END_DATE;

取数用,目的是保证SYS_MATIAN_DATE表有足够的记录,以使对于每一条历史拉链表中的记录都能取得到;本文给出了我们进行拉链表展开时的一个思路。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181372.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 分子排列不同会导致_《分子生物学》习题答案

    分子排列不同会导致_《分子生物学》习题答案《分子生物学》课后习题第1章绪论1.简述孟德尔、摩尔根和Waston等人对分子生物学发展的主要贡献。孟德尔是遗传学的奠基人,被誉为现代遗传学之父。他通过豌豆实验,发现了遗传学三大基本规律中的两个,分别为分离规律及自由组合规律。摩尔根发现了染色体的遗传机制,创立染色体遗传理论,是现代实验生物学奠基人。于1933年由于发现染色体在遗传中的作用,赢得了诺贝尔生理学或医学奖。Watson于1953年和克里…

    2022年7月11日
    16
  • idea构建springboot_钉钉的使用方法和技巧

    idea构建springboot_钉钉的使用方法和技巧随着技术框架的不断更新,一些公司摒弃了原先的技术框架模式。而springboot慢慢取代了原有的ssm框架开发。为什么选择springboot呢?配置简单不需要编写太多的xml; 基于spring构建,容易上手; 独立运行不依赖于容器; 内置服务器tomcat不需要打war包; 提供maven极简配置; 对于各种框架有很好的集成; 为SpringCloud微服务奠定基础,使微服务构建变得简单;下面让我们使用idea一起搭建完整版的SpringBoot项目:一.创建SpringBoot项

    2022年9月3日
    3
  • linux安装telnet服务「建议收藏」

    linux安装telnet服务「建议收藏」文章目录前言一、telnet是什么?二、使用步骤1.安装telent2、重新启动守护进程3、测试总结前言最新公司需要迁移项目需要用到telnet命令,趁此机会做个总结归纳提示:以下是本篇文章正文内容,下面案例可供参考一、telnet是什么?telnet是一种简单的基于文本的网络协议,用于通过“TCP/IP”网络访问远程计算机和终端;telnet为用户提供了一个双向的交互式文本通信系统,该系统使用超过8字节的虚拟终端连接。二、使用步骤1.安装telent步骤如下:tep1、rpm.

    2025年7月9日
    0
  • 排序二叉树-删除节点

    排序二叉树-删除节点前面(https://blog.csdn.net/jsjsjs1789/article/details/106772632),我们已经了解了什么是排序二叉树以及排序二叉树的遍历和添加元素,现在我们一起来看一下,排序二叉树是如何删除元素的。packagexmht.datastructuresandalgorithms.datastructure.binarysortTree;/***@authorshengjk1*@date2020/6/15*/publicclassB

    2022年7月25日
    6
  • 太原智慧小区有哪些_智慧城市规划

    太原智慧小区有哪些_智慧城市规划经过3个月的紧张施工,至7月初,位于龙城大街的“首开·国风上观”小区成为我市首个实现电、水、热采集“多表合一”的智能化小区。记者从国网太原供电公司了解到,该试点小区住户达3524户,是目前国内“多表合一”改造试点中规模较大的,也是我省试点中规模最大的小区。今年,国家发改委、国家能源局、工信部曾联合出台《关于推进“互联网+”智慧能源发展的指导意见》,其中…

    2022年10月9日
    1
  • Laravel引入第三方库的方法

    Laravel引入第三方库的方法

    2021年10月25日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号