史上最详拉链表演示

-拉链表
--就是反应一条数据历史变化过程的表,
拉链表程序涉及到的表
1 源表--取数据的源头    2 拉链表 --这张表里的数据体现了一个数据变化过程

实现拉链表的过程
1--造一个数据来源表,一个拉链表(相当于目标表)
2--来源表的数据同步到拉链表
2.1 当来源表的数据发生了变化(新增或者修改)
2.2 需要再次将发生了变化 (新增或者修改) 的数据同步到拉链表,此时同一个业务主键会有2条或者多条数据(比如7369的员工发生了变化,需要
    将7369的数据同步到拉链表中,拉链表里就会有2条 7369 的数据)
3--修改拉链表中重复数据的失效时间(将原来那条数据的失效时间修改为当前时间)

---造源表
CREATE TABLE EMP_LALIAN_SOURCE 
AS
SELECT T.*
FROM EMP T;

SELECT * FROM EMP_LALIAN_SOURCE;  --- 源表 

--创建一张拉链表  
create table EMP_LALIAN_TAG
(
  EMPNO    NUMBER(4)
  ,ENAME    VARCHAR2(10)
  ,JOB      VARCHAR2(9)
  ,MGR      NUMBER(4)
  ,HIREDATE DATE
  ,SAL      NUMBER(7,2)
  ,COMM     NUMBER(7,2)
  ,DEPTNO   NUMBER(2)
  ,START_DATE  DATE
  ,END_DATE    DATE
  ,ACTIVE_FLAG  VARCHAR2(10)
);


-----2--来源表的数据同步到拉链表, --初始化基础数据
INSERT INTO EMP_LALIAN_TAG 
SELECT T.EMPNO,
       T.ENAME,
       T.JOB,
       T.MGR,
       T.HIREDATE,
       T.SAL,
       T.COMM,
       T.DEPTNO
       ,T.HIREDATE---入职日期这一天,就是这条数据的开始生效时间
       ,TO_DATE('47121231','YYYYMMDD')
       ,'Y'
FROM EMP_LALIAN_SOURCE T;
COMMIT;

SELECT * FROM EMP_LALIAN_TAG;   --查看初始化基础数据


---2.1 当来源表的数据发生了变化
UPDATE EMP_LALIAN_SOURCE T SET DEPTNO = 40  WHERE DEPTNO = 20;
UPDATE EMP_LALIAN_SOURCE T SET SAL = 2850  WHERE EMPNO= 7782;
INSERT INTO EMP_LALIAN_SOURCE VALUES(123,'AAA','CLERK',7698,TRUNC(SYSDATE,'DD'),2380,100,20);

COMMIT;
SELECT * FROM EMP_LALIAN_SOURCE;


--2.3 需要再次将发生了变化的数据同步到拉链表,此时同一个业务主键会有2条数据
---2.3 ---新增,或者有改变的最新数据写入到 拉链表  ---开链
INSERT INTO EMP_LALIAN_TAG
SELECT T.EMPNO,
       T.ENAME,
       T.JOB,
       T.MGR,

你可能感兴趣的:(ORACLE,数据库,sql,数据库,servlet)