You are on page 1of 40

Créer d'autres objets de schéma

Copyright © 2004, Oracle. Tous droits réservés.


Objectifs

A la fin de ce chapitre, vous pourrez :


• créer des vues simples et complexes
• extraire des données à partir de vues
• créer, gérer et utiliser des séquences
• créer et gérer des index
• créer des synonymes privés et publics

Copyright © 2004, Oracle. Tous droits réservés.


Objets de base de données

Objet Description

Table Unité de stockage de base ; constituée de lignes


Vue Représentation logique de sous-ensembles de
données d'une ou de plusieurs tables
Séquence Génère des valeurs numériques
Index Améliore les performances de certaines
interrogations
Synonyme Affecte d'autres noms aux objets

Copyright © 2004, Oracle. Tous droits réservés.


Qu'est-ce qu'une vue ?

Table EMPLOYEES

Copyright © 2004, Oracle. Tous droits réservés.


Avantages des vues

Restreindre Simplifier les


l'accès aux interrogations
données complexes

Permettre Présenter les mêmes


l'indépendance données sous
des données différentes vues

Copyright © 2004, Oracle. Tous droits réservés.


Vues simples et vues complexes

Fonctionnalité Vues simples Vues complexes


Nombre de tables Une Une ou plusieurs
Contient des fonctions Non Oui
Contient des groupes de Non Oui
données
Opérations LMD par Oui Pas toujours
l'intermédiaire d'une vue

Copyright © 2004, Oracle. Tous droits réservés.


Créer une vue

• Incluez une sous-interrogation dans l'instruction


CREATE VIEW :
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];

• La sous-interrogation peut contenir une syntaxe


SELECT complexe.

Copyright © 2004, Oracle. Tous droits réservés.


Créer une vue

• Créer la vue EMPVU80, qui contient les informations


relatives aux employés du département 80 :
CREATE VIEW empvu80
AS SELECT employee_id, last_name, salary
FROM employees
WHERE department_id = 80;
View created.
• Décrire la structure de la vue à l'aide de la commande
iSQL*Plus DESCRIBE :

DESCRIBE empvu80

Copyright © 2004, Oracle. Tous droits réservés.


Créer une vue

• Créer une vue à l'aide d'alias de colonne dans la


sous-interrogation :
CREATE VIEW salvu50
AS SELECT employee_id ID_NUMBER, last_name NAME,
salary*12 ANN_SALARY
FROM employees
WHERE department_id = 50;
View created.

• Sélectionner les colonnes de cette vue par les


noms d'alias indiqués :

Copyright © 2004, Oracle. Tous droits réservés.


Extraire des données d'une vue

SELECT *
FROM salvu50;

Copyright © 2004, Oracle. Tous droits réservés.


Modifier une vue

• Modifiez la vue EMPVU80 en utilisant une clause


CREATE OR REPLACE VIEW. Ajoutez un alias pour
chaque nom de colonne :
CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS SELECT employee_id, first_name || ' '
|| last_name, salary, department_id
FROM employees
WHERE department_id = 80;
View created.
• Les alias de colonne dans la clause CREATE OR
REPLACE VIEW sont répertoriés dans le même
ordre que les colonnes de la sous-interrogation.

Copyright © 2004, Oracle. Tous droits réservés.


Créer une vue complexe

Créez une vue complexe contenant des fonctions de


groupe pour afficher les valeurs de deux tables :
CREATE VIEW dept_sum_vu
(name, minsal, maxsal, avgsal)
AS SELECT d.department_name, MIN(e.salary),
MAX(e.salary),AVG(e.salary)
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name;
View created.

Copyright © 2004, Oracle. Tous droits réservés.


Règles concernant les opérations LMD sur
une vue

• Vous pouvez généralement effectuer des


opérations LMD sur des vues simples.
• Vous ne pouvez pas supprimer une ligne si la vue
contient les éléments suivants :
– Des fonctions de groupe
– Une clause GROUP BY
– Le mot-clé DISTINCT
– Le mot-clé ROWNUM de pseudo-colonne

Copyright © 2004, Oracle. Tous droits réservés.


Règles concernant les opérations LMD sur
une vue

Vous ne pouvez pas modifier les données d'une vue si


cette vue contient :
• Des fonctions de groupe
• Une clause GROUP BY
• Le mot-clé DISTINCT
• Le mot-clé ROWNUM de pseudo-colonne
• Des colonnes définies par des expressions

Copyright © 2004, Oracle. Tous droits réservés.


Règles concernant les opérations LMD sur
une vue

Vous ne pouvez pas ajouter de données par l'intermédiaire


d'une vue si celle-ci comporte :
• Des fonctions de groupe
• Une clause GROUP BY
• Le mot-clé DISTINCT
• Le mot-clé ROWNUM de pseudo-colonne
• Des colonnes définies par des expressions
• Des colonnes NOT NULL dans les tables de base, qui
ne sont pas sélectionnées par la vue

Copyright © 2004, Oracle. Tous droits réservés.


Utiliser la clause WITH CHECK OPTION

• Vous pouvez garantir que les opérations LMD


effectuées sur la vue restent dans le domaine de la
vue, à l'aide de la clause WITH CHECK OPTION :
CREATE OR REPLACE VIEW empvu20
AS SELECT *
FROM employees
WHERE department_id = 20
WITH CHECK OPTION CONSTRAINT empvu20_ck ;
View created.

• Toute tentative de modification du numéro de


département d'une ligne quelconque de la vue échoue,
car elle transgresse la contrainte WITH CHECK
OPTION.

Copyright © 2004, Oracle. Tous droits réservés.


Empêcher les opérations LMD

• Vous pouvez garantir qu'aucune opération LMD


n'est effectuée en ajoutant l'option WITH READ
ONLY à la définition de la vue.
• Toute tentative d'effectuer une opération LMD sur
une ligne quelconque de la vue entraîne la
génération d'une erreur par le serveur Oracle.

Copyright © 2004, Oracle. Tous droits réservés.


Empêcher les opérations LMD

CREATE OR REPLACE VIEW empvu10


(employee_number, employee_name, job_title)
AS SELECT employee_id, last_name, job_id
FROM employees
WHERE department_id = 10
WITH READ ONLY ;
View created.

Copyright © 2004, Oracle. Tous droits réservés.


Supprimer une vue

Vous pouvez supprimer une vue sans perdre de


données, car une vue est basée sur les tables sous-
jacentes de la base.
DROP VIEW view;

DROP VIEW empvu80;


View dropped.

Copyright © 2004, Oracle. Tous droits réservés.


Exercice 10 : présentation de la partie 1

Cet exercice porte sur les points suivants :


• créer une vue simple
• créer une vue complexe
• créer une vue avec une contrainte CHECK
• tenter de modifier des données d'une vue
• supprimer des vues

Copyright © 2004, Oracle. Tous droits réservés.


Séquences

Objet Description

Table Unité de stockage de base ; constituée de lignes


Vue Représente de façon logique des sous-ensembles
de données d'une ou plusieurs tables
Séquence Génère des valeurs numériques
Index Améliore les performances de certaines
interrogations
Synonyme Affecte d'autres noms aux objets

Copyright © 2004, Oracle. Tous droits réservés.


Séquences

Une séquence :
• Permet de générer automatiquement des nombres
uniques
• Est un objet pouvant être partagé
• Peut être utilisée pour créer une valeur de clé primaire
• Remplace le code de l'application
• Permet un accès plus rapide aux valeurs lorsqu'elle
est placée en mémoire cache

2 4 6 8 10
1 3 5 7 9

Copyright © 2004, Oracle. Tous droits réservés.


Instruction CREATE SEQUENCE : syntaxe

Définir une séquence pour générer automatiquement


des nombres séquentiels :
CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];

Copyright © 2004, Oracle. Tous droits réservés.


Créer une séquence

• Créez une séquence nommée DEPT_DEPTID_SEQ à


utiliser comme clé primaire dans la table DEPARTMENTS.
• N'utilisez pas l'option CYCLE.

CREATE SEQUENCE dept_deptid_seq


INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;
Sequence created.

Copyright © 2004, Oracle. Tous droits réservés.


Pseudo-colonnes NEXTVAL et CURRVAL

• NEXTVAL renvoie la prochaine valeur de la séquence.


Elle renvoie une valeur unique chaque fois qu'elle est
référencée, même pour des utilisateurs différents.
• CURRVAL renvoie la valeur actuelle de la séquence.
• La pseudo-colonne NEXTVAL doit être utilisée pour
que CURRVAL contienne une valeur.

Copyright © 2004, Oracle. Tous droits réservés.


Utiliser une séquence

• Insérer un nouveau département nommé


"Support" dans l'emplacement dont l'ID est 2500 :
INSERT INTO departments(department_id,
department_name, location_id)
VALUES (dept_deptid_seq.NEXTVAL,
'Support', 2500);
1 row created.

• Afficher la valeur actuelle de la séquence


DEPT_DEPTID_SEQ :
SELECT dept_deptid_seq.CURRVAL
FROM dual;

Copyright © 2004, Oracle. Tous droits réservés.


Mettre en mémoire cache les valeurs
d'une séquence

• La mise en mémoire cache des valeurs d'une


séquence permet un accès plus rapide à ces valeurs.
• Des trous peuvent apparaître dans les valeurs de la
séquence dans les cas suivants :
– Une annulation se produit
– Le système connaît une défaillance
– Une séquence est utilisée dans une autre table

Copyright © 2004, Oracle. Tous droits réservés.


Modifier une séquence

Modifier la valeur de l'incrément, la valeur maximale, la


valeur minimale, l'option de recyclage ou l'option de
mise en mémoire cache :

ALTER SEQUENCE dept_deptid_seq


INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
Sequence altered.

Copyright © 2004, Oracle. Tous droits réservés.


Règles de modification d'une séquence

• Vous devez être propriétaire de la séquence ou


posséder le privilège ALTER pour la séquence.
• Seuls les numéros de séquence ultérieurs sont
affectés.
• La séquence doit être supprimée et recréée pour
permettre le redémarrage de la séquence à un
numéro différent.
• Une validation est effectuée.
• Pour supprimer une séquence, utilisez l'instruction
DROP :
DROP SEQUENCE dept_deptid_seq;
Sequence dropped.

Copyright © 2004, Oracle. Tous droits réservés.


Index

Objet Description

Table Unité de stockage de base ; constituée de lignes


Vue Représente de façon logique des sous-ensembles
de données d'une ou plusieurs tables
Séquence Génère des valeurs numériques
Index Améliore les performances de certaines
interrogations
Synonyme Affecte d'autres noms aux objets

Copyright © 2004, Oracle. Tous droits réservés.


Index

Un index :
• Est un objet de schéma
• Est utilisé par le serveur Oracle pour accélérer
l'extraction de lignes à l'aide d'un pointeur
• Peut réduire les E/S disque à l'aide d'une méthode
d'accès permettant de localiser les données rapidement
• Est indépendant de la table indexée
• Est utilisé et géré automatiquement par le serveur
Oracle

Copyright © 2004, Oracle. Tous droits réservés.


Comment les index sont-ils créés ?

• Automatiquement : un index unique est créé


automatiquement lorsque vous incluez une contrainte
PRIMARY KEY ou UNIQUE dans la définition d'une table.

• Manuellement : les utilisateurs peuvent créer des index


non-uniques sur des colonnes afin d'accélérer l'accès
aux lignes.

Copyright © 2004, Oracle. Tous droits réservés.


Créer un index

• Créer un index sur une ou plusieurs colonnes :

CREATE INDEX index


ON table (column[, column]...);

• Accélérer l'accès des interrogations à la colonne


LAST_NAME de la table EMPLOYEES :

CREATE INDEX emp_last_name_idx


ON employees(last_name);
Index created.

Copyright © 2004, Oracle. Tous droits réservés.


Règles de création des index
Créez un index dans les cas suivants :
 Une colonne contient un large éventail de valeurs
 Une colonne contient un grand nombre de valeurs NULL
 Une ou plusieurs colonnes sont fréquemment utilisées
ensemble dans une clause WHERE ou une condition de jointure
 La table est volumineuse et la plupart des interrogations
doivent extraire moins de 2 à 4 % des lignes de la table
Ne créez pas d'index dans les cas suivants :
 Les colonnes ne sont pas souvent utilisées comme condition
dans l'interrogation
 La table est petite ou la plupart des interrogations doivent
extraire plus de 2 à 4 % des lignes de la table
 La table est mise à jour fréquemment

 Les colonnes indexées sont référencées dans le cadre d'une


expression

Copyright © 2004, Oracle. Tous droits réservés.


Supprimer un index

• Supprimer un index du dictionnaire de données à


l'aide de la commande DROP INDEX :

DROP INDEX index;

• Supprimer l'index UPPER_LAST_NAME_IDX du


dictionnaire de données :
DROP INDEX emp_last_name_idx;
Index dropped.
• Pour supprimer un index, vous devez en être le
propriétaire ou posséder le privilège DROP ANY
INDEX.

Copyright © 2004, Oracle. Tous droits réservés.


Synonymes

Objet Description

Table Unité de stockage de base ; constituée de lignes


Vue Représente de façon logique des sous-ensembles
de données d'une ou plusieurs tables
Séquence Génère des valeurs numériques
Index Améliore les performances de certaines
interrogations
Synonyme Affecte d'autres noms aux objets

Copyright © 2004, Oracle. Tous droits réservés.


Synonymes

Simplifiez l'accès aux objets en créant un synonyme


(un autre nom pour un objet). Grâce aux synonymes,
vous pouvez :
• Créer une référence plus simple à une table
appartenant à un autre utilisateur
• Raccourcir le nom des objets
CREATE [PUBLIC] SYNONYM synonym
FOR object;

Copyright © 2004, Oracle. Tous droits réservés.


Créer et supprimer des synonymes

• Créer un nom abrégé pour la vue DEPT_SUM_VU :

CREATE SYNONYM d_sum


FOR dept_sum_vu;
Synonym Created.

• Supprimer un synonyme :
DROP SYNONYM d_sum;
Synonym dropped.

Copyright © 2004, Oracle. Tous droits réservés.


Synthèse

Ce chapitre vous a permis d'apprendre à :


• créer, utiliser et supprimer des vues
• générer automatiquement des numéros de séquence
à l'aide d'un générateur de numéros de séquence
• créer des index afin d'accélérer l'extraction par les
interrogations
• utiliser des synonymes pour affecter des noms
alternatifs aux objets

Copyright © 2004, Oracle. Tous droits réservés.


Exercice 10 : présentation de la partie 2

Cet exercice porte sur les points suivants :


• créer des séquences
• utiliser des séquences
• créer des index non-uniques
• créer des synonymes

Copyright © 2004, Oracle. Tous droits réservés.

You might also like