IBM i - Creer une table temporelle

Trucs & Astuces - SQL

AddThis Social Bookmark Button

Depuis la V7R3 IBM a introduit la notion de table temporelle.Cette fonctionnalité permet de traiter de manière simple vos historiques des données (alimentation, consultation).

 

 La mise en oeuvre est relativement simple.

Les tables temporelles fonctionnent par paire. Une table pour vos données, une table pour l'historique.

La première table contient toutes les données de base métier, (vous pouvez utiliser une table déjà existante). Il faudra lui ajouter 3 champs d'horodatage pour pouvoir dater les enregistrements.

La seconde table, contient l'historique des données et a la même structiure que la première table (champs d'horodatage compris).

Par exemple, la table des départements peut être définie comme suit : 

 

CREATE OR REPLACE TABLE DEPARTMENT
      (DEPTNO    CHAR(3)       NOT NULL,
       DEPTNAME  VARCHAR(36)   NOT NULL,
       MGRNO     CHAR(6),
       ADMRDEPT  CHAR(3)       NOT NULL,
       LOCATION  CHAR(16),
       START_TS  TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW BEGIN,
       END_TS    TIMESTAMP(12) NOT NULL GENERATED ALWAYS AS ROW END,
       TS_ID     TIMESTAMP(12) GENERATED ALWAYS AS TRANSACTION START ID,
      PERIOD SYSTEM_TIME (START_TS, END_TS),
      PRIMARY KEY (DEPTNO))

 

Ici les champs dédiés à la table temporelle sont START_TS, END_TS etTS_ID.

 

 Puis, on crée la table historique :

 

CREATE TABLE DEPARTMENT_HIST LIKE DEPARTMENT

 

Enfin, on lie les 2 tables :

 

ALTER TABLE DEPARTMENT ADD VERSIONING USE HISTORY TABLE DEPARTMENT_HIST

 

Il est ensuite facile de consulter la table telle qu'elle était il y a 6 mois par exemple :

 SELECT * FROM DEPARTMENT FOR SYSTEM_TIME AS OF CURRENT TIMESTAMP - 6 MONTHS