Database Reference
In-Depth Information
Code SQL (
suite
)
Commentaire (
suite
)
Création.de.la.vue.matérialisée.des.employés.
avec.une.contrainte.
primary key
.(colonne.clé.
primaire.de.la.table).
Rafraîchissement.incrémental.(
fast
).après.
modifications.sur.la.table.
CREATE MATERIALIZED VIEW soutou.v_mat_employes
REFRESH FAST ON COMMIT
WITH PRIMARY KEY
AS SELECT
employee_id, irst_name, last_name,
email, hire_date, job_id,
salary, commission_pct, manager_id,
department_id
FROM hr.employees e;
Création.du.journal.des.opérations.qui.sera.vidé.
tous.les.5 jours.
CREATE MATERIALIZED VIEW LOG ON hr.departments d
WITH PRIMARY KEY, ROWID
PURGE REPEAT INTERVAL '5' DAY;
Création.de.la.vue.matérialisée.des.départements.
avec.une.contrainte.
primary key
.(colonne.clé.
primaire.de.la.table).
Rafraîchissement.incrémental,.première.
actualisation :.le.lendemain.à.11 h.puis.tous.les.
lundis.à.15 h.
CREATE MATERIALIZED VIEW soutou.v_mat_
departements
REFRESH FAST
START WITH ROUND(SYSDATE + 1) + 11/24
NEXT NEXT_DAY(TRUNC(SYSDATE),'LUNDI') + 15/24
WITH PRIMARY KEY
AS SELECT department_id, department_name,
manager_id, location_id
FROM hr.departments;
Les vues indexées ou matérialisées ne sont pas la panacée et doivent être abordées avec
circonspection…
Tout d'abord, la vue doit être
déterministe
, c'est-à-dire toujours fournir les mêmes résul-
tats si les tables sources ont les mêmes données, ce qui exclut l'appel à des fonctions
comme celles fournissant la date et l'heure courantes ou encore celles renvoyant des
données aléatoires (
RAND
,
GUID
ou
UUID
…).
Il existe de nombreuses restrictions à l'écriture de vues synchrones. Comme les lignes
originelles doivent pourvoir être retrouvées, cela exclut certains opérateurs d'agréga-
tion autres que
SUM
,
COUNT
,
MAX
et
MIN
, les jointures externes, les sous-requêtes, les
valeurs non déinies (
NULL
), les opérations ensemblistes (
UNION
,
INTERSECT
,
EXCEPT
),
l'opérateur
DISTINCT
, les fonctions de fenêtrage, les groupages OLAP (
CUBE
,
ROLLUP
,
GROUPING
) et presque tous les opérateurs particuliers spéciiques à certains SGBDR.
Lorsque la vue contient des calculs mathématiques, il est important (mais pas impératif)
que les expressions intègrent des
calculs précis
, c'est-à-dire effectués sur des types SQL à
précision ixe, déinie et limitée. On devra alors utiliser du
DECIMAL
(ou
NUMERIC
) ou des
entiers (
SMALLINT
,
INT
,
BIGINT
). En effet, l'emploi d'un type de données numériques à