Académique Documents
Professionnel Documents
Culture Documents
TD BD Repartie 2013/2014
Les vues :
1. Définition et intérêts :
Une Vue est une table logique pointant sur une ou plusieurs tables ou vues et ne contient physiquement
pas de données.
Il est possible de rassembler, dans une vue, des informations provenant de plusieurs tables. On parle
de "vue" car il s'agit simplement d'une représentation des données dans le but d'une exploitation
visuelle. Les données présentes dans une vue sont définies grâce à une clause SELECT.
Une vue peut être filtrée, interrogée avec des jointures, des sous-requêtes, …
Une Vue permet de limiter l'accès à des données dans la base de données.
Une Vue peut faciliter la création de requêtes complexes via la création de raccourci ou d'alias.
Une Vue permet de présenter des données issues d'une table sous de différents formats.
La structure d'une Vue est stockée dans le dictionnaire de données et peut contenir 1000 colonnes.
2. Syntaxe :
3. Exemples :
Dans les exemples ci-dessous nous considérons la base de données Scott ayant le schéma suivant :
FROM emp
1
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
Vue créée.
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
SAL NUMBER(7,2)
DEPTNO NUMBER(2)
Examiner le type de chaque colonne de la vue crée (est elle modifiable ou non ?)
FROM user_updatable_columns
COLUMN_NAME UPD
------------------------------ ---
ENAME YES
JOB YES
SAL YES
DEPTNO YES
2
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
FROM emp
Vue créée.
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
SAL NUMBER
DEPTNO NUMBER(2)
FROM user_updatable_columns
COLUMN_NAME UPD
------------------------------ ---
ENAME YES
JOB YES
SAL NO
DEPTNO YES
c. Exemple 3 : l’exemple suivant montre la création d’une vue en précisant les noms des
colonnes.
3
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
FROM emp
Vue créée.
NOM VARCHAR2(10)
METIER VARCHAR2(9)
SALAIRE NUMBER
DEPART NUMBER(2)
d. Exemple 4 : la création d’une vue en lecture seule. Alors les actions update, insert et delete
sont interdites.
FROM emp
WHERE deptno = 10
Vue créée.
FROM user_updatable_columns
4
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
COLUMN_NAME UPD
------------------------------ ---
NOM NO
METIER NO
SALAIRE NO
DEPART NO
Vous remarquez bien que le champ updatable est à NO pour toutes les colonnes.
e. Exemple 5 : L'option WITH CHECK OPTION ou WITH CHECK OPTION CONSTRAINT crée
une contrainte de vérification sur la vue à partir de la clause WHERE.
Les vues créées avec l'option WITH CHECK OPTION CONSTRAINT empêche toutes mises à
jour de la Vue si les conditions de la clause WHERE ne sont pas respectées.
FROM emp
WHERE deptno = 10
Vue créée.
VALUES('Daniel','DBA',4000,78);
5
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
ERREUR à la ligne 1 :
VALUES('Daniel','DBA',4000,10);
1 ligne créée.
Remarque :
FORCE VIEW permet de créer des vues lorsque la table ou les tables utilisées pendant la
création ne sont pas disponibles dans votre environnement, alors la Vue
sera INVALIDE mais existante.
Avec NOFORCE (valeur par défaut), si les tables n'existent pas, la vue n'est pas créée.
Les développeurs oracle peuvent se retrouver dans des situations d'urgences de
développement, ou ils sont obligés de forcer la création de vue car des privilèges sont
manquants sur les Objets ou alors l’administrateur de la BD n'a pas encore eu le temps de
créer les tables...
Les déclencheurs :
1. Définition :
Un trigger est une procédure qui est géré automatiquement par la base de données et qui est
associée à un événement donné (BEFORE UPDATE, AFTER DELETE, AFTER INSERT, …). Si
l’événement arrive alors l’exécution de la procédure est lancée automatiquement pour modifier les
tables sur lesquelles porte le trigger.
Les déclencheurs (TRIGGERS en anglais) sont par exemple, utiles pour propager des opérations
de mise à jour (INSERT, UPDATE, DELETE) d'une table afin de garder la cohérence de la base.
On distingue deux types de triggers DML différents :
Les triggers table (STATEMENT) à déclenchement unique.
Les triggers ligne (ROW) à déclenchement sur chaque ligne.
6
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
2. Syntaxe :
[ OF column [, column]... ]
]...
ON { [ schema. ]table
ON { [ schema. ]SCHEMA
[ WHEN (condition) ]
Block_pl/sql
};
3. Exemples :
7
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
DECLARE
v_username varchar2(10);
BEGIN
FROM dual;
:new.create_date := sysdate;
:new.created_by := v_username;
END;
AFTER INSERT
ON orders
DECLARE
8
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
v_username varchar2(10);
BEGIN
FROM dual;
VALUES
END ;
BEFORE UPDATE
ON orders
DECLARE
v_username varchar2(10);
BEGIN
FROM dual;
9
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
:new.updated_date := sysdate;
:new.updated_by := v_username;
END;
AFTER UPDATE
ON orders
DECLARE
v_username varchar2(10);
BEGIN
FROM dual;
VALUES
END;
10
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
BEFORE DELETE
ON orders
DECLARE
v_username varchar2(10);
BEGIN
FROM dual;
VALUES
END;
AFTER DELETE
ON orders
DECLARE
11
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
v_username varchar2(10);
BEGIN
FROM dual;
VALUES
Begin
End if ;
End if ;
End if ;
End ;
12
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
Supprimer un Trigger :
Activer/Désactiver un Trigger :
ALTER TABLE table_name DISABLE ALL TRIGGERS; -- Désactiver tous les triggers d’une
table
ALTER TABLE table_name ENABLE ALL TRIGGERS; -- Activer tous les triggers d’une table
Une vue matérialisée (VM) est un moyen simple de créer une vue physique d’une table.
À la différence d’une vue standard, les données sont dupliquées. On l’utilise à des fins d’optimisation
de performance, lorsque le select associé est particulièrement complexe ou lourd, ou pour faire des
réplications de table.
La « fraicheur » des données de la VM dépend des options choisies. Le décalage entre les données de
la table maître et la VM peut être nul (rafraichissement synchrone) ou d’une durée planifiée : heure,
jour, ...
Suivant le contexte il existe différents types de vues matérialisées possibles : sur clé primaire, rowid, et
plus ou moins complexes : avec fonctions agrégées, sous requêtes, jointures, …
Il pourra être utile de faire des tests d’actualisation (complète et rapide), de bien peser les volumétries,
doser les fréquences d’actualisation en fonction des besoins réels, ...
Si l’option “réplication avancée” d’Oracle (Oracle Advanced replication option) n’est pas précisée à la
création, les VM ne pourront être utilisées qu’en lecture seule
Dès qu’un ordre SQL est très consommateur de ressources et revient relativement souvent, on peut
mettre en place une vue matérialisée avec la clause QUERY REWRITE.
Certains DBAs (Data Base Administrator) déconseillent de trop créer de vues matérialisées sur une
table, car ceci peut entraîner des pertes de performances lors des COMMIT puisququ’il doit rafraîchir
les vues matérialisées.
13
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
On peut dire que les vues matérialisées peuvent consommer beaucoup d’espace disque. Mais à l’heure
actuelle, quand on voit le coût du stockage, ça ne pose pas tellement de problèmes.
2. Syntaxe :
Syntaxe minimale :
3. Exemples :
Les snapshots sont utilisés pour répliquer les données depuis une source maître vers plusieurs cibles.
Les snapshots peuvent être en lecture seule ou mis à jour. Avant de créer un snapshot, il faut d’abord
créer un lien vers la base de données source.
Deux types de snapshots peuvent être crées : simples et complexes. Un snapshot simple ne contient pas
de clause distinct, group by, connect by, de jointure multi-tables ou d’opérations set.
Un REFRESH FAST utilise un snapshot log, pour actualiser le snapshot. Ce fichier se trouve sur le
même site que la table maître. Dans le snapshot log, sont stockées les modifications intervenues sur la
table maître. Ainsi, pour chaque mise à jour, seules les modifications qui sont envoyées, et non
l’ensemble des données. Par contre, un REFRESH COMPLETE est obligatoire pour les snapshots
complexes.
14
ISG Tunis 3ème LFIG
TD BD Repartie 2013/2014
Une utilisation classique des snapshots en mise à jour est le cas du contrôle technique automobile.
Tous les centres de contrôle stockent des données concernant les véhicules qu’ils ont contrôlés durant
la journée. Chaque nuit, les données sont déversées dans la base nationale qui centralise les données de
l’ensemble du parc automobile du pays. Notons que, les snapshots en mise à jour peuvent engendrer
des conflits. Un déclencheur (en anglais trigger) sauvegarde les mises à jour opérées sur le snapshot et
les transmet au site maître au moment du rafraîchissement de ce snapshot.
http://www.oracle.com/technetwork/articles/sql/11g-dataguard-083323.html
http://docs.oracle.com/cd/E11882_01/server.112/e16638/autostat.htm#PFGRF94188
15