sqlplsqletsqlplusv6

Upload: ibou-ndiaye

Post on 15-Oct-2015

18 views

Category:

Documents


0 download

TRANSCRIPT

  • COURS

    SQL

    &

    SQL*Plus

    &

    PL/SQL

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 2

    SQL

    1. INTRODUCTION 7

    1.1. DEFINITIONS 7 1.2. LOFFRE ORACLE 9 1.3. LES COMMANDES 10 1.4. LES OBJETS 11

    2. INTERROGATION DES DONNEES 12

    2.1. SYNTAXE DU VERBE SELECT 12 2.2. INDEPENDANCE LOGIQUE EXTERNE 14 2.3. ELIMINATION DE DOUBLONS : DISTINCT 21 EXERCICES SERIE 1 22 2.4. OPERATION DE SELECTION 23 2.4.1. OPERATEURS ARITHMETIQUES 25 2.4.2. CRITERES DE COMPARAISON : OPERATEURS SUR LES CHAINES : LIKE ET SOUNDEX 26 2.4.3. CRITERES DE COMPARAISON AVEC LOPERATEUR IN 29 2.4.4. CRITERES DE COMPARAISON AVEC LOPERATEUR BETWEEN 30 2.4.5. CRITERES DE COMPARAISON AVEC UNE VALEUR NULLE 31 2.4.6. LES OPRATEURS ANY, SOME ET ALL 32 EXERCICES SERIE 2 34 2.5. EXPRESSIONS ET FONCTIONS 35 2.5.1. LES EXPRESSIONS 36 2.5.2. LES FONCTIONS 39 EXERCICES SERIE 3 48 2.6. LES FONCTIONS DE GROUPE / UTILISATION DE FONCTIONS AGGREGATIVES 49 2.7. PRESENTATION DU RESULTAT TRIE SELON UN ORDRE PRECIS 50 EXERCICES SERIE 4 54 2.9. REQUETES MULTI-RELATIONS SANS SOUS-REQUETES : LA JOINTURE OU PRODUIT CARTESIEN 55 2.9. REQUETES MULTI-RELATIONS SANS SOUS-REQUETES : LA JOINTURE OU PRODUIT CARTESIEN (SUITE) 56 2.9. REQUETES MULTI-RELATIONS SANS SOUS-REQUETES : LA JOINTURE OU PRODUIT CARTESIEN(SUITE) 57 2.10. REQUETES MULTI-RELATIONS AVEC LES OPERATEURS ENSEMBLISTES 58 2.11. SOUS-INTERROGATIONS NON SYNCHRONISEE 61 2.11. SOUS-INTERROGATIONS NON SYNCHRONISEE (SUITE) 62 2.12. LA JOINTURE EXTERNE 64 2.12. LA JOINTURE EXTERNE (SUITE) 65 2.11. SOUS-INTERROGATIONS SYNCHRONISEE 66 2.11. SOUS-INTERROGATIONS SYNCHRONISEE (SUITE) 67 EXERCICES SERIE 5 68 2.14. LA RECHERCHE HIERARCHIQUE 69 EXERCICES SERIE 6 76 2.15. LE PARTITIONNEMENT 77

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 3

    2.15. LE PARTITIONNEMENT (SUITE) 78 EXERCICES SERIE 7 80

    3. MISE A JOUR DES DONNEES 81

    3.1. INSERTION DE LIGNES 82 3.2. MODIFICATION DE LIGNES 82 3.3. SUPPRESSION DE LIGNES 84 3.3.1. VIA LA COMMANDE DELETE 84 3.3.2. VIA LA COMMANDE TRUNCATE 85 EXERCICES SERIE 8 88

    4. LE SCHEMA DE DONNEES 89

    4.1 LES PRINCIPAUX OBJETS DUNE BASE 90

    4.2 LES REGLES DE NOMMAGE DES OBJETS DUNE BASE 91

    4.3 LES TYPES DE DONNEES 92 4.3 LES TYPES DE DONNEES (SUITE) 93 4.5 CREATION DUNE TABLE 95 4.5 CREATION DUNE TABLE (SUITE) 96 4.5 CREATION DUNE TABLE (SUITE) 97 4.6 LES CONTRAINTES DINTEGRITE 98 4.6 LES CONTRAINTES DINTEGRITE (SUITE) 99 4.6 LES CONTRAINTES DINTEGRITE (SUITE) 100 4.6 LES CONTRAINTES DINTEGRITE (SUITE) 101 4.6 LES CONTRAINTES DINTEGRITE (SUITE) 102 4.6 LES CONTRAINTES DINTEGRITE (SUITE) 103 4.6 LES CONTRAINTES DINTEGRITE (SUITE) 104 4.6 LES CONTRAINTES DINTEGRITE (SUITE) 105 4.6 LES CONTRAINTES DINTEGRITE (SUITE) 106 4.6 LES CONTRAINTES DINTEGRITE (SUITE) 107 4.6 LES CONTRAINTES DINTEGRITE (SUITE) 108 4.7 CREATION DUN INDEX 109 4.7 CREATION DUN INDEX 110 EXERCICES SERIE 9 111 4.8 MODIFICATION DUNE TABLE 112 4.8 MODIFICATION DUNE TABLE (SUITE) 113 4.8 MODIFICATION DUNE TABLE (SUITE) 114 4.8 MODIFICATION DUNE TABLE (SUITE) 116 4.8 MODIFICATION DUNE TABLE (SUITE) 117 4.8 MODIFICATION DUNE TABLE (SUITE) 118 4.13 LE DICTIONNAIRE DE DONNEES 127 4.13 LE DICTIONNAIRE DE DONNEES (SUITE) 128 4.13 LE DICTIONNAIRE DE DONNEES (SUITE) 129 4.13 LE DICTIONNAIRE DE DONNEES (SUITE) 130 4.13 LE DICTIONNAIRE DE DONNEES (SUITE) 131 EXERCICES SERIE 11 133

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 4

    5. CONCURRENCE DACCES 134

    PLAN 134 5.1 TRANSACTION 134 5.2 GESTION DES VERROUS 134 5.1. TRANSACTION 135 EXERCICES SERIE 12 138 5.2. GESTION DES VERROUS 139 EXERCICES SERIE 13 147

    6. LES VUES 152

    6.1. CREATION DUNE VUE 153 6.1. CREATION DUNE VUE (SUITE) 154 6.2. MANIPULATION SUR LES VUES 155 EXERCICES SERIE 14 156

    1. INTRODUCTION 159

    2. STRUCTURE DUN BLOC PL/SQL 160

    3. LES VARIABLES UTILISEES DANS PL/SQL 162

    3.1. LES DIFFERENTS TYPES DE VARIABLES LOCALES 162 3.1.1. VARIABLES DE TYPE ORACLE 163 3.1.2. VARIABLES DE TYPE BOOLEEN 164 3.1.3. VARIABLES FAISANT REFERENCE AU DICTIONNAIRE DE DONNEES 165 3.1.4. INITIALISATION DES VARIABLES 168 3.1.5. VISIBILITE DES VARIABLES 169 3.2. VARIABLES DE LENVIRONNEMENT EXTERIEUR A PL/SQL 170

    4. LES TRAITEMENTS 171

    4.1. IF : TRAITEMENT CONDITIONNEL 171 4.2. BOUCLE DE BASE LOOP : TRAITEMENT REPETITIF 172 4.3. BOUCLE FOR : TRAITEMENT REPETITIF 173 4.4. BOUCLE WHILE : TRAITEMENT REPETITIF 174

    5. LES CURSEURS EN PL/SQL 175

    5.1. DEFINITIONS 175 5.2. CURSEUR EXPLICITE 176 5.3. LES ATTRIBUTS DUN CURSEUR 181 5.3.1. %FOUND 182 5.3.2. %NOTFOUND 184 5.3.3. %ISOPEN 185 5.3.4. %ROWCOUNT 186

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 5

    5.4. SIMPLIFICATION DCRITURE 187 5.4.1. DECLARATION DE VARIABLES 187 5.4.2. TRAITEMENT DU CURSEUR 188

    6. GESTION DES ERREURS EN PL/SQL 190

    7. EXERCICES PL/SQL 195

    7.1. EX1 : LES BOUCLES 195 7.2. EX2 : LES CURSEURS 195 7.3. EX3 : LES ERREURS 195

    1. PRESENTATION DE SQL*PLUS 197

    2. LES COMMANDES DE LEDITEUR 200

    3. LES COMMANDES DE LENVIRONNEMENT 201

    3.1. COMMANDES DENTREES / SORTIES 202 3.2. COMMANDES DE DIALOGUE 203 3.3. COMMANDES DE FORMATAGE DE RAPPORT 207 3.4. COMMANDES DE DEFINITION DE LENVIRONNEMENT 213

    4. EXERCICE 218

    ANNEXES 219

    ANNEXE A : 220 SCHEMA ET EXTENSION DE LA BASE AERIENNE 220 ANNEXE B : VARIABLES DENVIRONNEMENT IMPORTANTES SOUS UNIX 223

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 6

    SQL

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 7

    1. INTRODUCTION

    1.1. Dfinitions

    Une base de donnes est un ensemble dinformations structures.

    Un SGBDR (Systme de Gestion de Bases de Donnes Relationnel) est un logiciel qui permet de :

    - stocker,

    - consulter,

    - modifier,

    - supprimer

    les donnes de la base de donnes.

    Un SGBDR stocke les informations dans des tables.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 8

    1.1. Dfinitions (suite ...)

    SQL (Strutured Query Language) :

    - est le langage utilis pour accder aux donnes d'une base de donnes.

    - est normalis. C'est un standard adopt par l'ANSI (American National Standards Institute). ANSI SQL92

    - est un langage ensembliste (non procdural)

    - est un langage universel utilis par :

    * les administrateurs

    * les dveloppeurs

    * les utilisateurs

    pour :

    * administrer et contrler

    * dfinir et dvelopper

    * manipuler

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 9

    1.2. Loffre ORACLE

    Designer : - case designer - case dictionary - case generator JDEVELOPPER

    Dveloppement d'applications

    Developper 9i : Forms, reports, Sqlplus, pro*c/C++, Jdevelopper,... sqlj

    Progiciels Administrationet interconnexion

    Oracle General Ledger Oracle Purchasing Oracle Payables Oracle Assets

    Administration : Sqldba,, sqlloader, Sqlplus, import/export, Enterprise Manager

    Interconnexion : Sqlnet, Oracle Gateway

    oracle 9i (sql): - standard et PLSQL - parallle - parallle Query - distribu - Java - Olap , Data mining

    Discover Xpress / 9i Olap Darwin / 9i data mining

    Warehouse builder

    Outils Groupware et Multimdia

    Collaboration suite

    Outils de conception

    Outils de DataWareHouse

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 10

    1.3. Les commandes

    Commandes de manipulation des donnes :

    - SELECT : interrogation

    - INSERT : insertion

    - UPDATE : mise jour

    - DELETE : suppression

    Les commandes de dfinition de donnes :

    - CREATE : cration d'un objet

    - ALTER : modification d'un objet

    - TRUNCATE : supprimer les lignes d'une table

    - DROP : supprimer un objet

    - RENAME : renommer un objet

    Remarque : les commandes GRANT et REVOKE seront vues dans le cours d'administration.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 11

    1.4. Les objets

    Les objets du SGBD Relationnel ORACLE sont les suivants :

    - les Tables,

    - les Vues,

    - les Index,

    - les Squences,

    - les Synonymes,

    - les Clusters.

    Seuls les objets TABLES, VUES, INDEX, SYNONYMES et les squences seront vus dans ce cours.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 12

    2. Interrogation des donnes

    2.1. Syntaxe du verbe SELECT

    SELECT [ALL | DISTINCT] {[schma.table].* | expr [c_alias], ...}

    FROM [schma].obj [t_alias], [schma].obj [t_alias], ...

    [WHERE ]

    [CONNECT BY

    [START WITH ]]

    [GROUP BY expr, expr, ...

    [HAVING ]]

    [ORDER BY {expr|pos} [ASC|DESC], [{expr|pos} [ASC|DESC], ...]

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 13

    2.1. Syntaxe du verbe SELECT (suite ...)

    La clause : SELECT ... FROM ... WHERE ...

    est une traduction simple du langage naturel. Elle permet de rechercher les donnes dans la base dans une ou plusieurs tables, dans une ou plusieurs vues.

    Notes : | : choix entre diffrentes options {} : choix obligatoire [] : facultatif

    a) obj : peut tre une TABLE, une VUE ou un SNAPSHOT

    b) expr est une expression base sur les valeurs d'une colonne

    c) c_alias est le renommage de l'expression

    d) t_alias est le renommage d'une table, vue ou shnapshot

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 14

    2.2. Indpendance logique externe

    L'objectif ici est de mettre en vidence l'indpendance logique externe.

    Table EMP (EMP#,NOM,ADR,SAL)

    Table PROD(Prod#, PRIX)

    ...

    ?

    PRIX PROD# N COUT Prix Produit EMP# AUGM. -------- ---------- ---- -------- -------------- -------- ----------

    ... ... ... cote ... ... ....

    - Redisposition - Renommage - Calculs horizontaux des colonnes - Constantes

    - Calculs verticaux TOTAL SAL -----------------

    ...

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 15

    2.2. Indpendance logique externe (suite ...)

    LE RENOMMAGE :

    - alias d'attributs et

    - alias des tables

    Exemple :

    SQL> SELECT p.pl# num_pilote FROM pilote p;

    NUM_PILOTE --------------------

    1 2 3 4 5 6 8 9 10 11 12 13 14 15 16 17

    16 ligne(s) slectionne(s).

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 16

    2.2. Indpendance logique externe (suite ...)

    Exemple :

    Ecrire de 3 manires diffrentes une projection sur toutes les colonnes de la table PILOTE.

    SQL> SELECT * FROM pilote;

    SQL> SELECT a.* FROM pilote a;

    SQL > SELECT pilote.* from pilote;

    Mme rsultat dans tous les cas :

    PL# PLNOM DNAISS ADR TEL SAL --- ------------ -------- -------------------- ------------ ---------

    1 Miranda 16/08/52 Sophia Antipolis 93548254 18009 2 St-exupry 16/10/32 Lyon 91548254 12300 3 Armstrong 11/03/30 Wapakoneta 96548254 24500 4 Tintin 01/08/29 Bruxelles 93548254 21100 5 Gagarine 12/08/34 Klouchino 93548454 22100 6 Baudry 31/08/59 Toulouse 93548444 21000 8 Bush 28/02/24 Milton 44556254 22000 9 Ruskoi 16/08/30 Moscou 73548254 22000 10 Math 12/08/38 Paris 23548254 15000 11 Yen 19/09/42 Munich 13548254 29000 12 Icare 17/12/62 Ithaques 73548211 17000,6 13 Mopolo 04/11/55 Nice 93958211 17000,6 14 Chretien 04/11/45 73223322 15000,6 15 Vernes 04/11/35 Paris 17000,6 16 Tournesol 04/11/29 Bruxelles 15000,6 17 Concorde 04/08/66 Paris 21000,6

    16 ligne(s) slectionne(s).

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 17

    2.2. Indpendance logique externe (suite ...)

    LA REDISPOSITION DES COLONNES (des attributs)

    Exemple : SQL> desc pilote; Nom Non renseign NULL? Type ------------------------------- -------- ----

    PL# NOT NULL NUMBER(4) PLNOM NOT NULL VARCHAR2(12) DNAISS NOT NULL DATE ADR VARCHAR2(20) TEL VARCHAR2(12) SAL NOT NULL NUMBER(7,2)

    SQL> SELECT pl#, sal, tel,plnom FROM pilote; PL# SAL TEL PLNOM --- --------- ------------ ------------

    1 18009 93548254 Miranda 2 12300 91548254 St-exupry 3 24500 96548254 Armstrong 4 21100 93548254 Tintin 5 22100 93548454 Gagarine 6 21000 93548444 Baudry 8 22000 44556254 Bush 9 22000 73548254 Ruskoi 10 15000 23548254 Math 11 29000 13548254 Yen 12 17000,6 73548211 Icare 13 17000,6 93958211 Mopolo 14 15000,6 73223322 Chretien 15 17000,6 Vernes 16 15000,6 Tournesol 17 21000,6 Concorde

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 18

    2.2. Indpendance logique externe (suite ...)

    LES CONSTANTES

    On peut rpter une constante pour chaque ligne ramene.

    Les constantes sont de type numrique ou alphanumrique (entre ' ').

    Exemple : SQL> SELECT plnom NOM , 'gagne' GAIN , sal SALAIRE FROM pilote;

    NOM GAIN SALAIRE ------------ ----- ---------

    Miranda gagne 18009 St-exupry gagne 12300 Armstrong gagne 24500 Tintin gagne 21100 Gagarine gagne 22100 Baudry gagne 21000 Bush gagne 22000 Ruskoi gagne 22000 Math gagne 15000 Yen gagne 29000 Icare gagne 17000,6 Mopolo gagne 17000,6 Chretien gagne 15000,6 Vernes gagne 17000,6 Tournesol gagne 15000,6 Concorde gagne 21000,6

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 19

    2.2. Indpendance logique externe (suite ...)

    LES CALCULS HORIZONTAUX

    Le calcul horizontal fait intervenir une ou plusieurs colonnes d'une mme table dans un tuple.

    Exemple :

    SQL> SELECT pl#, sal*12 "SALAIRE ANNUEL" FROM pilote;

    PL# SALAIRE ANNUEL --- ---------------

    1 216108 2 147600 3 294000 4 253200 5 265200 6 252000 8 264000 9 264000 10 180000 11 348000 12 204007,2 13 204007,2 14 180007,2 15 204007,2 16 180007,2 17 252007,2

    16 ligne(s) slectionne(s).

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 20

    2.2. Indpendance logique externe (suite ...)

    LES CALCULS VERTICAUX

    Les calculs verticaux font intervenir les valeurs d'une colonne sur l'ensemble ou un sous-ensemble des tuples ramens par une requte.

    Remarque : l'alias d'une colonne ou d'une expression sera de 30 caractres max. et sera entre "" si l'alias contient des sparateurs.

    Exemple :

    SQL> SELECT avtype TYPE, SUM(cap) "CAPACITE TOTALE" FROM avion GROUP BY avtype;

    TYPE CAPACITE TOTALE ---------- ---------------

    A300 1300 A320 320 B707 400 B727 250 Caravelle 300 Concorde 650

    6 ligne(s) slectionne(s).

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 21

    2.3. Elimination de doublons : DISTINCT

    Le mot cl DISTINCT dans la clause SELECT :

    - ralise un tri sur les colonnes et - limine les doublons.

    Exemple : SQL> SELECT DISTINCT avtype FROM avion; AVTYPE ----------

    A300 A320 B707 B727 Caravelle Concorde 6 ligne(s) slectionne(s).

    Il est possible de faire un DISTINCT de plusieurs colonnes. Exemple : SQL> SELECT DISTINCT avtype,cap FROM avion;

    AVTYPE CAP ---------- ---------

    A300 300 A300 400 A320 320 B707 400 B727 250 Caravelle 300 Concorde 300 Concorde 350

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 22

    EXERCICES Srie 1

    Alias des attributs Ecrire la requte qui prsente tous les pilotes de la compagnie avec le listing suivant: Numro Nom Adresse Salaire Mensuel

    Redisposition des attributs Ecrire la requte qui prsente tous les pilotes de la compagnie avec le listing suivant Nom Salaire Mensuel Numro Adresse

    Alias dune table Ecrire la requte qui renomme(alias) la relation PILOTE en P dans une requte.

    Calculs horizontaux Ecrire la requte qui calcule la dure d'un vol. Ecrire une requte qui calcule le salaire annuel SAL_ANN, pour chaque pilote.

    Calculs verticaux Ecrire une requte qui calcule la somme des salaires des pilotes.

    Distinct Donner tous les types d'avions de la compagnie

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 23

    2.4. Opration de slection

    SELECT ...

    FROM ...

    WHERE [NOT] prdicat1 [AND|OR] [NOT] prdicat2 ...

    La clause WHERE permet deffectuer un filtrage de tuples. C'est dire slectionner un sous-ensemble de lignes dans les tables.

    Seules les lignes vrifiant la clause WHERE seront retournes.

    Prdicat : nom de colonne nom de colonne constante OPERATEUR constante expression expression

    - Les oprateurs logiques (AND, OR) peuvent tre utiliss dans le cas de prdicats multiples.

    - L'oprateur NOT inverse le sens du prdicat.

    - Pas de limite dans le nombre de prdicats.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 24

    2.4. Opration de slection (suite ...)

    Exemples :

    Lister tous les pilotes de la compagnie

    SQL> SELECT * FROM pilote;

    ==> - pas de slection - tous les tuples de la relation PILOTE sont ramens

    Lister les pilotes qui vivent Nice

    SQL> SELECT * FROM PILOTE WHERE ADR='Nice';

    ==> - slection : clause WHERE

    - seuls les tuples de la relation PILOTE vrifant la clause WHERE sont ramens

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 25

    2.4.1. Oprateurs arithmtiques

    Dans les critres de la clause WHERE, nous pouvons avoir les oprateurs de comparaison arithmtiques suivants :

    = : gal,

    != : diffrent,

    > : suprieur,

    >= : suprieur ou gal,

    < : infrieur,

    SELECT plnom FROM pilote WHERE sal > 10000 AND tel='93000000';

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 26

    2.4.2. Critres de comparaison : oprateurs sur les chanes : LIKE et SOUNDEX

    Oprateur LIKE

    Caractres jokers de l'oprateur LIKE : % : remplace 0 n caractres _ : remplace 1 et un seul caractre

    Exemple 1 :

    Slectionnez les pilotes dont le nom commence par M.

    SQL> SELECT * FROM pilote WHERE plnom LIKE 'M%';

    Exemple 2 :

    Slectionnez les pilotes dont le nom contient un A en troisime position.

    SQL> SELECT * FROM pilote WHERE plnom LIKE '___A%';

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 27

    2.4.2. Critres de comparaison : oprateurs sur les chanes : LIKE et SOUNDEX (suite ...)

    La clause ESCAPE permet de de-spcialiser les caractres jokers : _

    et

    %.

    Le caractre prcis derrire la clause ESCAPE permet la recherche des caractres _ et % dans une chane de caractres.

    Exemple 3 :

    Slectionnez les pilotes dont le nom contient le caractre _.

    SQL> SELECT * FROM pilote WHERE plnom LIKE '%*_%' ESCAPE '*';

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 28

    2.4.2. Critres de comparaison : oprateurs sur les chanes : LIKE et SOUNDEX (suite ...)

    Oprateur SOUNDEX

    SOUNDEX(chane) est une fonction qui permet une comparaison phontique.

    SOUNDEX(chane) gnre une valeur numrique sur 4 octets (selon un algorithme prcis).

    Pour faire une comparaison phontique entre 2 chanes : SOUNDEX(chane1) = SOUNDEX(chane2)

    Exemple :

    Slectionnez les pilotes dont le nom ressemble Tonton

    SQL> SELECT plnom FROM pilote WHERE SOUNDEX(plnom) = SOUNDEX('Tonton');

    PLNOM ------------

    Tintin

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 29

    2.4.3. Critres de comparaison avec l'oprateur IN

    IN est l'oprateur qui permet de tester l'appartenance de la valeur d'une colonne une liste.

    Exemples :

    Liste des vols dont la ville d'arrive est Nice ou Paris.

    SQL> SELECT vol# FROM vol WHERE va IN ('Nice ', 'Paris');

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 30

    2.4.4. Critres de comparaison avec l'oprateur BETWEEN

    BETWEEN est l'oprateur qui permet de tester si une valeur appartient un intervalle.

    Remarque : les bornes sont incluses.

    Exemple :

    Salaire et nom des pilotes gagnant entre 15000 et 18000

    SQL> SELECT plnom, sal FROM pilote WHERE sal BETWEEN 15000 AND 18000;

    PLNOM SAL ------------ ---------

    Math 15000 Icare 17000,6 Mopolo 17000,6 Chretien 15000,6 Vernes 17000,6 Tournesol 15000,6

    6 ligne(s) slectionne(s).

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 31

    2.4.5. Critres de comparaison avec une valeur nulle

    IS NULL et IS NOT NULL sont les oprateurs qui permettent de tester si une valeur a t dfinie ou pas pour une colonne. NULL : non dfini.

    SELECT ... FROM table WHERE coli IS NULL; coli non renseigne ou SELECT ... FROM table WHERE coli IS NOT NULL; coli renseigne

    Remarque : pour tester l'absence de valeur , ne pas utiliser = NULL ou != NULL.

    Note : la syntaxe de comparaison est la suivante : colonne IS NULL | IS NOT NULL

    Exemple : Nom des pilotes dont le numro de tl. n'est pas renseign

    SQL> SELECT plnom FROM pilote WHERE tel IS NULL;

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 32

    2.4.6. Les oprateurs ANY, SOME et ALL

    Ils se combinent avec l'un des oprateurs arithmtiques :

    {= | != | > | >= | < |

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 33

    2.4.6. Les oprateurs ANY, SOME et ALL (suite ...)

    Exemple 2 :

    Slectionnez les pilotes dont le salaire n'est pas un nombre rond.

    SQL> SELECT plnom FROM pilote WHERE sal != ALL (12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000, 20000, 21000, 22000, 24000, 25000, 26000, 27000, 28000,29000);

    Remarque :

    La condition != ALL est quivalente la condition NOT IN.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 34

    EXERCICES Srie 2

    "Numros et type d'avions de capacit suprieure 300"

    "Nom des pilotes habitants Nice ou Paris"

    "Quels sont les noms de pilotes comportant un 't' en quatrime position ou dont le nom se prononce 'Bodri'.

    "Quels sont les vols au dpart de Nice, Paris ou Bordeaux ?"

    "Quels sont les avions dont la capacit est comprise entre 250 et 310 ?"

    "Quels sont les pilotes dont l'adresse ou le tlphone sont inconnus ?"

    "Nom des pilotes ayant un 'a' et un 'e' dans leur nom"

    "Nom des pilotes ayant 2 'o' dans leur nom "

    "Nom des pilotes dont le numro de tlphone est renseign"

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 35

    2.5. Expressions et fonctions

    Lobjectif est de faire des calculs sur des :

    - constantes,

    - variables

    de type :

    - numriques,

    - caractres,

    - dates.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 36

    2.5.1. Les expressions

    Colonne Colonne Constante Oprateur Constante Fonction Fonction

    - Oprateurs arithmtiques : + - * /

    - Oprateur sur chanes de caractres : ||

    - Pas d'oprateurs spcifiques aux dates.

    Exemple1 :

    Simuler une augmentation de 10% des salaires des pilotes

    SQL> SELECT sal * 1.10 AUGMENTATION FROM pilote;

    Exemple 2 :

    Pilotes dont le salaire est suprieur 2 fois 10000 SQL> SELECT * FROM pilote WHERE sal > 10 000 * 2;

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 37

    2.5.1. Les expressions (suite ...)

    Exemple 3 :

    ajouter 3 jours une date

    '08-DEC-90' + 3 = '11-DEC-90'

    Exemple 4 :

    enlever 3 jours une date

    '11-DEC-90' - 3 = '08-DEC-90'

    Exemple 5 :

    nombre de jours entre 2 dates

    date1 - date 2 = nbjours

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 38

    2.5.1. Les expressions (suite ...)

    Exemple 6 :

    Noms et adresses des pilotes

    SQL> SELECT plnom || ----> || adr FROM pilote;

    PLNOM||---->||ADR -------------------------------------

    Miranda ---->Sophia Antipolis St-exupry ---->Lyon Armstrong ---->Wapakoneta Tintin ---->Bruxelles Gagarine ---->Klouchino Baudry ---->Toulouse Bush ---->Milton Ruskoi ---->Moscou Math ---->Paris Yen ---->Munich Icare ---->Ithaques Mopolo ---->Nice Chretien ----> Vernes ---->Paris Tournesol ---->Bruxelles Concorde ---->Paris scott ---->Nice Conficius ---->Pekin

    18 ligne(s) slectionne(s).

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 39

    2.5.2. Les fonctions

    Fonctions numriques - ABS(n) : valeur absolue de n

    - SIGN(n) : signe de n (-1 ou 0 ou +1)

    - CEIL(n) : plus petit entier >= n

    - FLOOR(n) : plus grand entier

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 40

    2.5.2. Les fonctions (suite ...)

    Fonctions caractres

    - LENGTH(chane) : longueur de la chane

    - UPPER(chane) : toutes les lettres de la chane en majuscules

    - LOWER(chane) : toutes les lettres de la chane en minuscules

    - INITCAP(chane) : premire lettre de chaque mot de la chane en majuscules, les autres en minuscules)

    - LPAD(chane,lg,[chane]) : complter gauche par une chane de caractres sur une longueur donne. Exemple : LPAD('DUPOND',10,'*# ') = '*#*#DUPOND'

    - RPAD(chane,lg,[chane]) : complter droite par une chane de caractres sur une longueur donne. Exemple : RPAD('DUPOND',10,'* ') = 'DUPOND****'

    Remarque : LPAD et RPAD peuvent tronquer une chane si lg < longueur totale de la chane.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 41

    2.5.2. Les fonctions (suite ...)

    - LTRIM(chane[,caractres]) : suppression gauche de caractres dans la chane. Exemple : LTRIM('DUPOND','DU ') = 'POND'

    - RTRIM(chane[,caractres]) : suppression droite de caractres dans la chane. Exemple : RTRIM('DUPOND','UD ') = 'DUPON'

    - SUBSTR(chane,position[,longueur]) : extraction d'une chane partir d'une position donne et sur une longueur donne Exemple : SUBSTR('DUPOND',2,3) = 'UPO'

    - INSTR(chane, sous_chane,[,position[,n]]) : recherche de la position de la n ime occurence d'une chane de caractres dans une autre chane de caractres partir d'une position donnes. Exemple : INSTR('DUPOND','D',1,2) = 6

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 42

    2.5.2. Les fonctions (suite ...)

    - REPLACE(chane,car[,chane]) : remplace un ensemble de caractres Exemples : REPLACE('TUTU','U', 'OU') = 'TOUTOU' REPLACE('TATA','T') = 'AA'

    - TRANSLATE(chane,car_source,car_cible) : trancodage de certains caractres par d'autres caractres dans une chane de caractres. Exemples : TRANSLATE(plnom,'AM','12') : - le A est remplac par 1 - le M est remplac par 2 dans les noms des pilotes

    - SOUNDEX(chane) : (voir 2.7.2)

    - ASCII(chane) : donne la correspondance ASCII du premier caractre de la chane. Exemple : ASCII('ADFGRSE') = 65

    - CHR(n) : caractre correspondant la valeur de n en ASCII. Exemple : CHR(65) = 'A'

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 43

    2.5.2. Les fonctions (suite ...)

    Fonctions date :

    - LAST_DAY(date) : dernier jour du mois dune date donne

    - NEXT_DAY(date, jour) : date du prochain jour partir d'une date donne.

    - ADD_MONTHS(date,n) : ajoute n mois une date donne. - MONTHS_BETWEEN(date1,date2) : nombre de mois entre 2 dates. - ROUND(date[,'precision']) : arrondi d'une date en fonction de la prcision Exemples : SYSDATE = '12-JUL-96' ROUND(sysdate,'MM') = '01-JUL-96' ROUND(sysdate + 4 ,'MM') = '01-AUG-96' ROUND(sysdate,'YY') = '01-JAN-97'

    - TRUNC(date[,'precision']) : truncature d'une date en fonction de la prcision Exemples : TRUNC(sysdate,'MM') = '01-JUL-96' TRUNC(sysdate + 4 ,'MM') = '01-JUL-96' TRUNC(sysdate,'YY') = '01-JAN-96'

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 44

    2.5.2. Les fonctions (suite ...)

    Fonctions de conversion de types :

    - TO_NUMBER(chane) : conversion d'une chane de caractres en nombre Exemple : TO_NUMBER('567') = 567

    - TO_CHAR(val[,'format']) : conversion d'une expression (date ou numrique) en chane de caractres selon un format de prsentation.

    - TO_DATE(chane[,'format']) : conversion d'une chane en date selon un format.

    Quelques formats numriques :

    9 Affichage de cette valeur si elle est diffrente de 0 0 Affichage de zros gauche pour une valeur zro $ Affichage de la valeur prfixe par le signe '$ ' , Affichage de ',' l'endroit indiqu . Affichage du point dcima l'endroit indiqu

    Exemple : TO_CHAR(1234,'0999999') = 0001234

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 45

    2.5.2. Les fonctions (suite ...)

    Quelques formats de conversion de date :

    TO_CHAR(date[,format])

    FORMAT tant la combinaison de codes suivants:

    YYYY Anne YY 2 derniers chiffres de l'anne MM numro du mois DD numro du jour dans le mois HH heure sur 12 heures HH24 heure sur 24 heures MI minutes SS secondes ...

    Exemple :

    SELECT TO_CHAR(SYSDATE,'DD MM YYYY HH24 : MI') FROM dual;

    ==> 01 07 1996 10 : 24

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 46

    2.5.2. Les fonctions (suite ...)

    Pour avoir les dates en lettres utiliser les formats suivants :

    YEAR anne en toutes lettres MONTH mois en toutes lettres MON nom du mois sur 3 lettres DAY nom du jour DY nom du jour sur 3 lettres SP nombre en toutes lettres ...

    Exemple :

    TO_CHAR(SYSDATE,' LE DD MONTH YYYY A HH24 : MI')

    ==> LE 26 SEPTEMBER 1996 A 16 : 30

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 47

    2.5.2. Les fonctions (suite ...) Fonctions diverses :

    NVL(expr,valeur) ==> Si expr IS NULL Alors valeur Sinon expr Finsi

    Exemple : SQL> SELECT NVL(sal,0) FROM pilote;

    DECODE(expression, valeur1, result1, [, valeur2, result2] ... [,defaut] ==> Si expression = valeur1 Alors result1 Sinon Si expression = valeur2 Alors result2 Sinon defaut Finsi Finsi Remarque : result1, result2, ... defaut peuvent tre de types diffrents.

    Exemple : Select plnom, decode(tel, null, 'Pas de tl.', 'Tl : '|| tel) "Info Tl" From Pilote;

    PLNOM Info Tel Miranda Tel : 93548254 St-exupery Tel : 91548254

    Vernes Pas de tel. Tournesol Pas de tel.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 48

    EXERCICES Srie 3

    "Lister les pilotes avec leur salaire tronqus au millier"

    "Lister les pilotes avec leur salaire. Pour ceux gagnant 17000,6 remplacer le salaire par '****' "

    "Slectionner les pilotes et leur tlphone. Pour ceux dont le tlephone n'est pas renseign, mettre ? "

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 49

    2.6. Les fonctions de groupe / utilisation de fonctions aggrgatives

    Les fonctions de groupe sont les suivantes :

    - AVG(expr) moyenne

    - COUNT(expr) nombre

    - MAX(expr) valeur maximim

    - MIN(expr) valeur minimum

    - STDDEV(expr) cart-type

    - SUM(expr) somme

    - VARIANCE(expr) variance

    Remarques : - les valeurs NULL sont ignores. - COUNT(*) permet de compter les lignes d'une table.

    Exemple : SQL> SELECT adr, AVG(sal), COUNT(sal), MAX(sal), MIN(sal), STDDEV(sal),SUM(sal), VARIANCE(sal) FROM pilote GROUP BY adr ;

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 50

    2.7. Prsentation du rsultat tri selon un ordre prcis

    Un rsultat peut tre tri grce la clause ORDER BY

    - de faon ascendante ASC ou

    - descendante DESC.

    Remarques :

    - par dfaut en Oracle le tri est toujours ascendant.

    - 16 critres de tri maximum.

    - dans un tri par ordre croissant les valeurs NULL apparaissent toujours en dernier

    Exemple :

    SQL> SELECT plnom, adr FROM pilote ORDER BY plnom;

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 51

    2.8. Utilisation des pseudo colonnes

    Gnralits

    A chaque table Oracle est associe un ensemble de colonnes implicites. Ces colonnes sont aussi appeles Pseudo Colonnes. Citons par exemple les colonnes ROWID, USER, SYSDATE, ROWNUM,

    ROWID, USER, SYSDATE et ROWNUM reprsentent respectivement : - l'adresse d'un tuple, compos de quatre champs: * numro de bloc dans le fichier, * le numro de tuple dans le bloc et * le numro de fichier, * le numro de segment

    - l'utilisateur courant d'Oracle

    - la date systme

    - numro des lignes rsultats d'une requte SQL

    2.8. Utilisation des pseudo colonnes (suite)

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 52

    Exemple

    Select Sysdate, user From Pilote;

    SYSDATE USER --------- --------

    08-JUN-99 SYSTEM 08-JUN-99 SYSTEM 08-JUN-99 SYSTEM 08-JUN-99 SYSTEM 08-JUN-99 SYSTEM 08-JUN-99 SYSTEM 08-JUN-99 SYSTEM 08-JUN-99 SYSTEM

    16 rows selected.

    La valeur de Sysdate et User est repte autant de fois qu'il ya de lignes dans la table.

    2.8. Utilisation des pseudo colonnes (suite)

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 53

    Exemple

    La table DUAL

    La table DUAL possde une seule colonne DUMMY et une seule ligne avec pour valeur X. Cette table sert slectionner des constantes, des pseudo colonnes ou des expressions en une seule ligne.

    Exemple : SQL> select SYSDATE, USER FROM SYS.DUAL;

    SYSDATE USER --------- ---------

    08-JUN-99 SYSTEM

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 54

    EXERCICES Srie 4

    "Ecrire une requte qui donne le salaire du pilote qui gagne le plus : "Max salaire Pilote "

    "Quels sont les noms, l'adresse et le salaire des pilotes de la compagnie, tris en ordre croissant sur l'adresse, et pour une mme adresse en ordre dcroissant sur le salaire ? "

    "Ecrire une requte qui recherche si l'utilisateur courant d'Oracle est un pilote ?"

    "Ecrire une requte qui rend ROWID, USER, SYSDATE, Numros de vol de tous les vols effectus la date d'aujourd'hui par le pilote Numro 4 ?". L'heure de dpart et d'arrive doivent apparatre dans la liste des colonnes de projection.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 55

    2.9. Requtes multi-relations sans sous-requtes : la jointure ou produit cartsien

    Gnralits

    Lobjectif de la jointure est de ramener sur une mme ligne le rsultat des informations venant de diffrentes tables.

    Dcomposition de la jointure :

    1. Slection 2. Projection des colonnes des diffrentes tables (colonnes du SELECT + colonnes de jointure) 3. Prdicat de jointure 4. Projection des colonnes du SELECT

    Remarques : - dans le prdicat de jointure comme dans le SELECT, prfixer les attributs si il y a ambiguit. - dans le prdicat de jointure, les alias des tables peuvent tre utiliss.

    L'objectif de l'auto-jointure est de ramener sur la mme ligne le rsultat des informations provenant de 2 lignes de la mme table.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 56

    2.9. Requtes multi-relations sans sous-requtes : la jointure ou produit cartsien (suite)

    Exemple 1 : sans auto jointure

    Donner la liste des pilotes qui assurent un vol au dpart de Nice.

    Select distinct plnom From Pilote p, Vol v Where p.pl#=v.pilote# and vd = 'Nice';

    PLNOM ------------

    Armstrong Bush Chretien Gagarine Miranda Mopolo Tintin

    7 rows selected.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 57

    2.9. Requtes multi-relations sans sous-requtes : la jointure ou produit cartsien(suite)

    Exemple 2 : avec auto jointure

    Donner les couples des Pilotes qui gagnent le mme Salaire.

    Select distinct p1.plnom, p2.plnom, p1.sal From Pilote p1, Pilote p2 Where p1.sal=p2.sal and p1.plnom >p2.plnom Order by sal;

    PLNOM PLNOM SAL ------------ ------------ ---------

    Tournesol Chretien 15000.6 Mopolo Icare 17000.6 Vernes Icare 17000.6 Vernes Mopolo 17000.6 Ruskoi Bush 22000

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 58

    2.10. Requtes multi-relations avec les oprateurs ensemblistes

    Gnralits

    L'objectif est de manipuler les ensembles ramens par plusieurs SELECT l'aide des oprateurs ensemblistes.

    Les oprateurs ensemblistes sont : - l'union : UNION,

    - l'intersection : INTERSECT et

    - la diffrence : MINUS

    Principe :

    SELECT ... FROM ... WHERE ... ==> ensemble oprateur ensembliste SELECT ... FROM ... WHERE ... ==> ensemble oprateur ensembliste SELECT ... FROM ... WHERE ... ==> ensemble ...

    SELECT ... FROM ... WHERE ... ==> ensemble

    [ORDER BY]

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 59

    2.10. Requtes multi-relations avec les oprateurs ensemblistes (suite ...)

    Rgles :

    - mme nombre de variables en projection

    - correspondance de type

    - colonne de tri rfrences par numro d'ordre

    Rsultat :

    - les titres des colonnes sont ceux du premier SELECT

    - la largeur de la colonne est celle de la plus grande largeur parmi les SELECT

    - opration distincte implicite (sauf UNION ALL)

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 60

    2.10. Requtes multi-relations avec les oprateurs ensemblistes (suite ...)

    Exemple :

    Considrons une compagnie arienne dont les pilotes sont grs par pays. Il peut tre intressant pour la direction d'avoir accs l'ensemble des pilotes de l'entreprise.

    Select plnom, sal from pilote_france

    UNION

    Select plnom, sal from pilote_usa

    UNION

    Select plnom, sal from pilote_Allemagne ;

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 61

    2.11. Sous-interrogations non synchronise

    Principe :

    lorsque dans un prdicat un des 2 arguments n'est pas connu, on utilise les sous-interrogations. SELECT ... FROM ... WHERE variable Op ? Le ? n'tant pas connu, il sera le rsultat d'une sous-requte.

    Rgle d'excution : cest la sous-requte de niveau le plus bas qui est value en premier, puis la requte de niveau immdiatement suprieur, ...

    CAS 1 : sous-interrogation ramenant une valeur On utilise les oprateurs =, >, ...

    CAS 2 : sous-interrogation ramenant plusieurs valeurs On utilise les ALL, IN, ANY, SOME.

    Remarque : une sous-interrogation peut ramener plusieurs colonnes. (on teste l'galit ou l'ingalit).

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 62

    2.11. Sous-interrogations non synchronise (suite)

    Exemple li au cas 1:

    Donner la liste des Pilote dont le salaire est suprieur celui du pilote N1.

    Select plnom, sal from pilote Where sal > (Select sal From Pilote Where pl# =1);

    PLNOM SAL ------------ ---------

    Armstrong 24500 Tintin 21100 Gagarine 22100 Baudry 21000 Bush 22000 Ruskoi 22000 Yen 29000 Concorde 1000.6

    8 rows selected.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 63

    2.11. Sous-interrogations (suite ...)

    L'oprateur EXISTS :

    la sous-interrogation ramne VRAI s'il existe au moins une ligne en rponse la sous-interrogation, FAUX sinon.

    L'interrogation principale s'excute si VRAI.

    Syntaxe : SELECT ... FROM ... WHERE [NOT] EXISTS (SELECT ...)

    Exemple : Donner la liste des Pilotes qui gagnent plus que tous les pilotes habitant Paris.

    Select plnom, sal, adr From Pilote p1 WHERE Not Exists(Select p2.sal From Pilote p2 Where p2.adr = 'Paris' and p1.sal

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 64

    2.12. La jointure externe

    La jointure externe ("outer join") se comporte comme l'oprateur de jointure avec en plus la possibilit de ramener des informations sur les lignes n'ayant pas vrifier la condition de jointure.

    Cette fonctionnalit est directement offerte par SQL d'Oracle, en faisant suivre, dans la condition de jointure, la colonne de la table qui ne contient pas linformation recherche, par le signe "(+)".

    L'oprateur "(+)" nous permettra par exemple en un seul trait de lister les noms des Pilotes qui conduisent avec leurs Vols et pour ceux qui ne conduisent pas uniquement leurs noms.

    Contraintes : - l'oprateur de jointure externe "(+)" doit apparatre au

    plus une fois dans un predicat de jointure - pas de prdicat avec IN ou OR admis

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 65

    2.12. La jointure externe (suite)

    Exemple :

    Donner la liste Pilotes et les numros de vol auxquels ils participent. Pour ceux qui ne participent aucun, leur nom doit tre affich.

    Select plnom, vol# From Pilote p, Vol v Where p.pl# = v.pilote#(+) ;

    PLNOM VOL# Miranda 100 Miranda 150 St-exupery 153 Armstrong 110 Armstrong 290 Tintin 120 Tintin 130 Gagarine 111 Gagarine 200 Baudry Bush 135 Bush 280 Bush 236 Ruskoi 156 Math Yen Icare 125

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 66

    2.11. Sous-interrogations synchronise

    Principe :

    lorsque dans un prdicat un des 2 arguments n'est pas connu, on utilise les sous-interrogations SELECT ... FROM ... WHERE variable Op ? (voir plus haut)

    Mais lorsque la valeur ? est susceptible de varier pour chaque ligne, on utilise les sous-interrogations synchronises.

    Rgles : - le prdicat de la sous-interrogation fait rfrence une colonne de l'interrogation principale - si une table est prsente dans les 2 select, la renommer

    Excution : L'excution de la sous-interrogation se fait pour chaque ligne de l'interrogation principale.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 67

    2.11. Sous-interrogations synchronise (suite)

    Exemple :

    Donner la liste des vols des Pilotes en service qui gagnent plus entre 20000 et 22000.

    Select distinct vol#, pilote# From Vol v Where pilote# in

    (Select p.pl# From Pilote p Where v.pilote#=p.pl# And p.Sal>20000 and p.Sal

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 68

    EXERCICES Srie 5

    Requtes avec alias obligatoires (auto-jointure) et prfixage d'attributs(naming)

    "Donner toutes les paires de noms de pilotes distincts, habitant la mme ville"

    Requtes effectuant une jointure syntaxique

    "Donner tous les noms des pilotes qui ont des noms davions ?"

    "Ecrire la requte qui donne les noms des pilotes qui conduisent un A300 ou B727 ?".

    "Tester la requte suivante : (SELECT PILOTE#, VD, VA FROM vol) INTERSECT (SELECT AVION#, VD, VA FROM VOL ); Quel est sa signification en langage naturel ?

    Sous-requtes connectes par les oprateurs ANY, ALL, EXISTS, IN.

    "Quel est le nom des avions dont la capacit est suprieure la capacit de chaque avion localis Nice ?"

    "Quel est le nom des avions dont la capacit est au moins gale celle d'un avion localis Nice ? "

    "Quel est le nom des pilotes assurant un vol au dpart de Nice ?"

    "Quel est le nom des pilotes assurant au moins un vol ?"

    "Quel est le nom des pilotes dont le salaire est suprieure au salaire maximum de tous les pilotes effectuant un vol au dpart de Paris ?"

    Requtes multi-relations avec sous-requtes indpendantes

    "Quels sont les noms des pilotes qui gagnent plus que le pilote nr. 5?"

    "Donner le nom des pilotes, et pour ceux qui sont en service, la liste des numros de vols qu'ils assurent ?"

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 69

    2.14. La recherche hirarchique

    Gnralits

    Le SQL d'Oracle permet la reprsentation et la manipulation de donnes ayant une structure hirarchique.

    Les lignes rsultats sont ordonnes selon le parcours de l'arbre.

    Le niveau de la hirarchie dans lequel se trouvent les donnes concernes par la recherche peut-tre accessible par la pseudo-colonne (attribut implicite de la table), LEVEL, jusqu' 256 niveaux.

    SELECT FROM [WHERE ] CONNECT BY PRIOR = [AND ] [START WITH ] ;

    Notes : - START WITH : ligne(s) de dpart de construction de l'arborescence (racine de l'arbre) - CONNECT BY fixe le parcours de la hirarchie (lien

    pre-fils) - PRIOR : colonne de dpart

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 70

    2.14. La recherche hirarchique (suite ...)

    Exemple :

    "Quels sont les vols en correspondance (direct ou indirecte) au dpart de Paris ?"

    Note : NICE ne doit pas tre une escale de dpart.

    SQL>column vol_en_corres format A30;

    SQL> Select LPAD(' ',2*(LEVEL),' ') || vol# vol_en_corres, vd, va From vol START WITH vd='Paris' CONNECT BY PRIOR va=vd AND vd != 'Nice';

    Vol_en_Corres VD VA 125 Paris Nice 135 Paris Toulouse 130 Toulouse Beauvais 290 Beauvais Marseille 150 Paris Nantes 156 Paris Lyon 140 Lyon Nice 153 Lyon Nice 236 Lyon Toulouse 130 Toulouse Beauvais 290 Beauvais Marseille 270 Paris New york 12 rows selected.

    2.14. La recherche hirarchique (suite ...)

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 71

    Arborescence de l'exemple prcdent

    Paris

    Nice

    Toulouse

    Nantes

    Lyon

    New York

    Beauvais Nice

    Nice

    Toulouse

    Beauvais

    Marseille

    Marseille

    De Paris nous pouvons atteindre Nice Toulouse, Nantes, Lyon et New York.

    La branche Nice n'est pas dveloppe car Nice ne doit pas tre une ville de Dpart.

    De Toulouse nous pouvons atteindre Beauvais.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 72

    2.14. La recherche hirarchique (suite ...)

    Etapes de traitement

    1. Calcul des enregistrements racines Ce sont les lignes qui satisfont le prdicat de la clause START WITH

    2. Calcul des lignes filles pour chaque Enregistrement Racine

    Chaque ligne fille doit satisfaire la condition de la clause CONNECT BY.

    3. Calcul rcursif des lignes filles pour chaque ligne fille de l'tape au dessus. Rpter autant que ncessaire la logique de l'tape 2

    4. En cas de prsence d'une clause Where, les lignes ne vrifiant pas la clause ne participe pas la construction de la hirarchie

    5. Restitution de l'arborescence

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 73

    2.14. La recherche hirarchique (suite ...)

    Remarque sur le prdicat de slection :

    - s'il est plac l'extrieur de la clause CONNECT BY, il limine certaines valeurs uniquement (le parcours de l'arborescence n'est pas interrompu)

    - si il est plac l'intrieur de la clause CONNECT BY, il limine certaines valeurs et leurs dpendances (le parcours de l'arborescence est interrompu).

    Limites :

    - une requte hirarchique ne doit pas contenir de jointure

    - une requte hirarchique ne peut tre effectue sur une vue de jointure

    - la clause ORDER BY est prioritaire la clause CONNECT BY

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 74

    2.14. La recherche hirarchique (suite ...)

    Dtection des boucles

    ORACLE dtecte les boucles ventuelles dans le CONNECT BY. L'ordre est interrompu et un message d'erreur est envoy l'utilisateur.

    Exemple Select LPAD(' ',2*(LEVEL),' ')

    || vol# vol_en_corres, vd, va From vol START WITH vd='Paris' CONNECT BY PRIOR va=vd;

    ERROR: ORA-01436: CONNECT BY loop in user data

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 75

    2.14. La recherche hirarchique (suite ...)

    La Pseudo Colonne LEVEL

    Cette colonne permet de contrler le Niveau d'une arborescence et d'viter des boucles.

    Exemple Select LPAD(' ',2*(LEVEL),' ')

    || vol# vol_en_corres, vd, va From vol START WITH vd='Paris' CONNECT BY PRIOR va=vd and Level

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 76

    EXERCICES Srie 6

    "Quels sont les vols en correspondance (direct ou indirecte) au dpart de Paris ?"

    Note : - NICE ne doit pas tre une escale de dpart.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 77

    2.15. Le partitionnement

    Gnralits

    Le partitionnement permet de regrouper les lignes rsultat en fonction des diffrentes valeurs prises par une colonne spcifie.

    SELECT ... FROM , ... GROUP BY [, , ...] [HAVING ] ;

    La spcification de la clause GROUP BY entrane la cration d'autant de sous-tables qu'il y a de valeurs diffrentes pour la colonne de partitionnement spcifie.

    De mme que la clause WHERE joue le rle de filtre pour la clause SELECT, la clause HAVING joue le rle de filtre pour la clause GROUP BY. L'excution de la clause HAVING sera effectue juste aprs celle du GROUP BY, pour slectionner les sous-tables qui satisfont la condition spcifie.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 78

    2.15. Le partitionnement (suite)

    Contraintes :

    - la colonne de partitionnement doit figurer dans la clause SELECT. - un seul GROUP BY est autoris par requte. - pas de GROUP BY dans une sous-

    requte.

    Exemple

    Quel est la capacit moyenne des avions par ville et par type.

    Select loc, avtype, AVG(cap) "Cap Moyenne" From avion Group by loc, avtype;

    LOC AVTYPE Cap Moyenne Nice A300 300 Nice CONCORDE 300 Paris A300 350 Paris A320 320 Paris B707 400 Paris CARAVELLE 300 Toulouse B727 250 Toulouse CONCORDE 350 8 rows selected.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 79

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 80

    EXERCICES Srie 7

    "Pour chaque ville de localisation davions de la compagnie (sauf "Paris") donner le nombre, les capacits minimales et maximales d'avions qui s'y trouvent ?"

    "Quels sont les pilotes (avec leur nombre de vols ) parmi les pilotes N 1, 2, 3 , 4 et 13 qui assurent au moins 2 vols ?"

    "Quelle est la capacit moyenne des avions par ville et par type ? "

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 81

    3. Mise jour des donnes

    Lobjectif de ce chapitre est de se familiariser avec les commandes de mise jour des donnes d'une base.

    Commandes :

    - d'insertion (INSERT),

    - de suppression (DELETE) et

    - de mise jour (UPDATE)

    des donnes dans une base Oracle.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 82

    3.1. Insertion de lignes

    INSERT INTO [ (nom_colonnes[,nom_colonnes]) ] VALUES (valeurs[,valeurs]) | sous_requte ;

    Insertion par valeur Insertion par requte

    Remarque : si toutes les valeurs des colonnes de la table sont insrees, il est inutile de prciser les colonnes. Si seules quelques valeurs sont insres, prciser les colonnes.

    Exemples : SQL> insert into pilote(pl#,plnom,dnaiss,sal) values(2, St-exupry', '16/10/32', 12300.0);

    SQL> insert into avion values(7, 'Mercure', 300, 'Paris', 'En service');

    SQL> insert into vol2 select * from vol where vd='Paris';

    3.2. Modification de lignes

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 83

    UPDATE

    SET nom_colonne1 = [, nom_colonne2 = ...]

    WHERE ;

    Exemple :

    Augmenter les pilotes habitant Nice de 10%

    SQL> UPDATE pilote SET sal = sal *1.10 WHERE adr='Nice';

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 84

    3.3. Suppression de lignes

    3.3.1. Via la commande DELETE

    DELETE FROM

    [WHERE ] ;

    Remarque : si pas de claure WHERE, la table entire est vide.

    Exemples :

    Supprimer les pilotes habitant Nice

    SQL > DELETE FROM pilote WHERE adr= 'Nice';

    Supprimer tous les pilotes

    SQL > DELETE FROM pilote;

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 85

    3.3.2. Via la commande TRUNCATE

    TRUNCATE TABLE nom_table

    [DROP STORAGE | REUSE STORAGE]

    Cette commande permet deffectuer des suppressions rapides. C'est une commande du LDD d'Oracle et ce titre quivaut un commit.

    Exemple :

    SQL> TRUNCATE TABLE pilote;

    Remarque : Autre manire de supprimer les donnes d 'une table : - la supprimer, - la recrer

    Exemple : SQL> DROP TABLE pilote; SQL> CREATE TABLE pilote(...);

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 86

    3.3.2. Via la commande TRUNCATE (suite ...)

    Avantages / Inconvnients des 3 solutions :

    1re option DELETE :

    - la suppression avec DELETE consomme de nombreuses ressources : espace RedoLog, rollbck segment, ...

    - pour chaque ligne supprime, des triggers peuvent se dclencher

    - la place prise par les lignes de la table n'est pas libre. Elle reste associe la table.

    2me option DROP :

    - tous les index, contraintes d'intgrit et triggers associs la table sont gelement supprims

    - tous les GRANT sur cette table sont supprims

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 87

    3.3.2. Via la commande TRUNCATE (suite ...)

    3me option TRUNCATE :

    - truncate est plus rapide car cette commande ne gnre pas d'informations (rollback) permettant de dfaire cette suppression. L'ordre est valid (commit) de suite.

    - truncate est irrversible pour la mme raison.

    - les contraintes, triggers et autorisations associs la table ne sont pas impacts

    - l'espace prise par la table et ses index peut tre libr (drop storage)

    - les triggers ne sont pas dclenchs

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 88

    EXERCICES Srie 8

    Effectuer des insertions respectivement dans pilote, avion et vol. Vrifier si les contraintes l'intgrits structurelles (entitit, domaine et de rfrence) sont prises en comptes. Vrifier aussi les valeurs nulles.

    Note : insrer un pilote ayant votre nom de login oracle et 2 vols effectus par ce pilote.

    Effectuer une insertion dans la table PILOTE2 via une sous-requte sur PILOTE.

    Mettre jour le salaire du pilote numro 3 19000 F et Valider.

    Supprimer le pilote numro 11 et invalider.

    Supprimer les lignes de la tables PILOTE2 via TRUNCATE. Tentez un ROLLBACK.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 89

    4. Le schma de donnes

    Plan 4.1 Les principaux objets dune base Oracle

    4.2 Les rgles de nommage des objets

    4.3 Les types de donnes

    4.4 Comparaison des chanes de caractres

    4.5 Cration d'une table

    4.6 Contraintes d'intgrit

    4.7 Cration d'un index

    4.8 Modification d'une table

    4.9 Dfinition des commentaires

    4.10 Consultation de la structure d'une table

    4.11 Cration d'un synonyme

    4.12 Les squences

    4.13 Le dictionnaire de donnes d'Oracle

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 90

    4.1 Les principaux objets dune base

    Gnralits

    Les principaux objets dune base Oracle sont :

    - la table : unit de base pour le stockage des donnes dans une base oracle.

    - la vue : sous ensemble logique d'une ou plusieurs tables et/ou autres vues

    - la squence : servent gnrer automatiquement les cls - lindex : acclrateur de requtes - les synonymes : autre nom d'un objet - le database link : lien vers le schma d'un utilisateur distant - le shnapshot : copy asynchrone d'une table distante - le trigger : alerte ou dclencheur (permet d'introduire la notion d'vnement dans une base de donnes) - procdures et packages : procdures stockes - le cluster : jointure physique entre deux ou plusieurs

    tables. - Type : type dfini par l'utilisateur (l'option objet)

    Note : Dans ce cours nous ne traitons que les objets : table, index, vue, squence et synonyme.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 91

    4.2 Les rgles de nommage des objets d'une base

    Rgles

    1. le nom dune objet doit commencer par une lettre

    2. sa longueur peut tre de 1 30 caractres

    3. ces noms ne doivent contenir que des lettres, des chiffres, "_", "$" et "#".

    4. Un mme objet dans le mme schma ne peut avoir le mme nom

    5. Le nom d'un objet ne peut tre un mot cl ou mot rserv dOracle

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 92

    4.3 Les types de donnes

    Les principaux types de donnes Oracle

    CHAR(taille) : Chane - longueur fixe - de 1 255 octets

    VARCHAR2(taille) : Chane de taille variable 1...2000 bytes

    VARCHAR(taille) : Idem varchar2 (type rserv pour les versions futures d'Oracle : ne pas utiliser)

    DATE : format par dfaut JJ-MON-AA

    LONG : type texte (taille jusqu' 2Gbytes)

    RAW(taille) : type binaire (taille de 1 255bytes)

    LONG RAW : type binaire long (taille jusqu' 2 Go)

    NUMBER(n1[, n2]) : n1 = nombre de digits du dcimal (de 1 38) n2 = nombre de digits aprs la virgule

    ROWID : Chane hex. reprsentant l'adresse unique d'une ligne d'une table.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 93

    4.3 Les types de donnes (suite)

    Les principaux types de donnes Oracle (suite)

    CLOB : nouveau type texte (jusqu' 4Go) BLOB : nouveau type binaire (jusqu' 4 Go) BFILE : donnes binaires stockes dans un fichier externe

    Remarques :

    1) une seule colonne de type LONG ou LONG RAW par table. Ces limites sont rompus avec Oracle et ses Larges Object LOB.

    2) l'utilisateur peut maintenant crer ses propres types grce la commande CREATE TYPE

    3) dans une mme table, plusieurs colonnes de type CLOB, BLOB et BFILE peuvent tre dfinies.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 94

    4.4 Comparaison entre chanes

    Comparaison varchar2 / char

    * Comparaison 1: Oracle ajoute des blancs au char le plus petit pour que les 2 chanes aient la mme longueur. Oracle compare ensuite car. par car. Ds qu'il y a une diffrence il conclut lequel est plus grand. ==> utilise si les 2 valeurs comparer sont de type CHAR

    * Comparaison 2 : Oracle compare car. par car. Ds qu'il y a une diffrence il conclut lequel est plus grand. Si on a atteint la fin du 1er varchar sans rencontrer de diffrence avec le deuxime, c'est le plus long (le 2me) qui est considr comme le plus grand. ==> utilise ds qu'une des 2 valeurs est de type varchar2 dans l'expression.

    COMP1 COMP2 ab > aa ab > aa ab > a ab > a ab > a ab > a ab = ab ab = ab 'a ' = 'a' 'a ' > 'a'

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 95

    4.5 Cration d'une table

    Gnralits

    1. une table est l'unit de base pour le stockage des donnes dans une base oracle

    2. Deux types de tables subsistent sous Oracle 8. Ce sont les tables dites objets et les tables relationnelles classiques. Nous tudions ici uniquement les tables relationnelles classiques

    3. Une table peut tre cre partir d'une requte

    Syntaxe

    CREATE TABLE . [( colonne typeDeDonne [DEFAULT expr] [contrainteAuNiveauColonne],

    [contrainteAuNiveauTable]

    )] | as subquery};

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 96

    4.5 Cration d'une table (suite)

    Syntaxe (suite)

    Avec :

    User : nom du propritaire de la table

    Table : nom de la table

    Default expr : valeur par dfaut d'une colonne en cas d'omission lors de l'insertion

    Colonne : nom de la colonne

    TypeDeDonne : le type dune colonne

    ContrainteAuNiveauColonne : spcification d'une contrainte d'intgrit au niveau colonne

    ContrainteAuNiveauTable : spcification d'une contrainte d'intgrit au niveau table

    SubQuery : Cration d'une table partir d'une sous-requte

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 97

    4.5 Cration d'une table (suite)

    Syntaxe (suite)

    Exemple 1 : Cration d'une table sans contraintes d'intgrits.

    create table pilote( pl# number(4) , plnom varchar2(12) , dnaiss date , adr varchar2(20) , tel varchar2(12), sal number(7,4) );

    Exemple 2 : Cration dune table partir d'une requte

    Create table Pilote2 As Select * from Pilote;

    La table Pilote2 sera peuple des lignes de la table Pilote.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 98

    4.6 Les contraintes d'intgrit

    Gnralits

    1. Les contraintes d'intgrit permettent de vrifier l'intgrit des donnes au niveau du schma

    2. La gestion des contraintes au niveau du schma allge d'autant le code des applicatifs

    3. Les contraintes d'intgrit nous vitent de supprimer malencontreusement les donnes dpendantes (intgrit de rfrence)

    4. Les principaux types de contraintes valables sous Oracle sont : - NOT NULL : refus de valeurs nulles pour une colonne

    - UNIQUE : indique que les valeurs dune ou plusieurs colonnes doivent tre unique

    - PRIMARY KEY : identificateur unique d'une ligne c'est aussi la contrainte d'intgrit d'entit - FOREIGN KEY : permet de grer l'intgrit de rfrence - CHECK : permet de grer l'intgit de domaines

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 99

    4.6 Les contraintes d'intgrit (suite)

    Gnralits (suite)

    5. il est conseill de nommer ses contraintes sinon Oracle affecte un nom par dfaut ayant le format suivant SYS_Cn. Exemple SYS_C0001;

    6. les contraintes peuvent tre dfinies au niveau colonne ou au niveau table.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 100

    4.6 Les contraintes d'intgrit (suite)

    Dfinition d'une contrainte au niveau Colonne

    . une contrainte est dfinie au niveau colonne lorsqu'elle n'implique pas des informations d'autres colonnes

    . Syntaxe colonne [CONSTRAINT nomContrainte]

    typeContrainte ;

    Dfinition d'une contrainte au niveau table

    . une contrainte est dfinie au niveau table lorsqu'elle implique plus dune colonne . lorsqu'elle est dfinie aprs la cration d'une table grce la commande Alter Table

    . Syntaxe ,

    [CONSTRAINT nomContrainte] typeContrainte (colonne, ),

    Note : NomContrainte : nom de la contrainte TypeContrainte : type de la contrainte

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 101

    4.6 Les contraintes d'intgrit (suite)

    La contrainte NOT NULL

    Cette contrainte empche les valeurs nulles sur une colonne

    Exemple Plnom varchar2(20) Not Null Sal number(7,2) nn_pilote_sal Not Null

    La contrainte UNIQUE key

    1. Cette contrainte empche la duplication des valeurs d'une colonne ou d'une ensemble de colonnes.

    2. Les valeurs nulles sont acceptes tant que la contrainte Not Null n'est pas spcifie.

    3. Un index unique est mis en place implicitement pour contrler l'unicit

    Exemple Plnom varchar2(20) nn_pilote_Plnom Not Null

    Constraint uk_ pilote_Plnom Unique

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 102

    4.6 Les contraintes d'intgrit (suite)

    La contrainte PRIMARY KEY

    1. Permet de dfinir un identifiant unique des lignes d'une table

    2. Peut tre dfinie sur une ou plusieurs colonne

    3. Permet de dfinir un identifiant unique des lignes d'une table

    4. un index unique est cr implicitement par Oracle pour assurer l'unicit

    Exemple Pl# Number(4) Constraint pk_pilote_pl#

    primary key, -- niveau colonne

    Pl# Number(4),

    Constraint pk_pilote_pl# primary key(pl#) -- niveau table

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 103

    4.6 Les contraintes d'intgrit (suite)

    PRIMARY KEY vs UNIQUE key

    P.K. Unique toutes les valeurs sont distinctes oui oui

    la colonne est dfinie en NOT NULL oui pas oblig.

    dfinit l'identifiant des lignes oui

    prcis une seule fois par table oui

    fait le lien avec REFERENCES oui

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 104

    4.6 Les contraintes d'intgrit (suite)

    La contrainte FOREIGN KEY

    1. permet de dfinir une cl trangre pour assurer l'intgrit de rfrence

    2. les valeurs de la cl trangre doivent correspondre celle de la cl primaire rfrence

    3. les mots cls permettant de dfinir les cls trangres sont : FOREIGN KEY, REFERENCES et ON DELETE CASCADE

    4. le mot cl REFERENCE utilis permet de dfinir des contraintes d'intgrit de rfrence au niveau colonne

    5. l'option DELETE CASCADE permet de propager les suppressions ;

    6. le mot cl FOREIGN KEY associ REFERENCES permet de dfinir une contrainte d'intgrit de rfrence au niveau table ;

    7. une Foreign Key peut tre dfini sur une ou plusieurs colonnes.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 105

    4.6 Les contraintes d'intgrit (suite)

    La contrainte FOREIGN KEY (suite)

    Exemple

    Niveau colonne :

    Pilote# number(4) constraint fk_vol_pilote# REFERENCES Pilote(pl#),

    Niveau Table :

    constraint fk_vol_pilote# FOREIGN KEY (pilote#) REFERENCES Pilote(pl#),

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 106

    4.6 Les contraintes d'intgrit (suite)

    La contrainte CHECK

    1. permet d'assurer l'intgrit de domaine

    2. permet de dfinir une condition que doit vrifier chaque ligne

    3. Certaines expressions ne sont pas autorises par exemple :

    -Faire rfrence aux pseudo colonnes CURRVAL, NEXTVAL, LEVEL et ROWNUM -Appeler les fonctions SYSDATE, UID, USER et USERENV - introduire des requtes qui se rfrent au valeurs d'autres lignes

    Exemple Niveau colonne :

    sal number(7,4) not null CHECK(sal < 70000.0)

    Niveau table : ha number(4), hd number(4) NOT NULL,

    CONSTRAINT ck_ha CHECK(HA > HD),

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 107

    4.6 Les contraintes d'intgrit (suite)

    Exemple gnral

    Dfinition du schma de la base de donnes arienne.

    create table pilote( pl# number(4) primary key, plnom varchar2(12) not null unique, dnaiss date not null, adr varchar2(20) default PARIS, tel varchar2(12), sal number(7,4) not null CHECK(sal < 70000.0) );

    create table avion( av# number(4) primary key, avtype varchar2(10) CONSTRAINT chk_type CHECK(avtype IN (A300, A310, A320, B707, Caravelle, B727, Concorde), cap number(4) not null, loc varchar2(20) not null, remarq long );

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 108

    4.6 Les contraintes d'intgrit (suite)

    Exemple gnral

    create table vol( vol# number(4) PRIMARY KEY, pilote# number(4) CONSTRAINT fk_pilote REFERENCES PILOTE(PL#) ON DELETE CASCADE, avion# number(4) NOT NULL, vd varchar2(20), va varchar2(20), hd number(4) NOT NULL, ha number(4),

    dat date, CONSTRAINT ck_ha CHECK(HA > HD),

    FOREIGN KEY (avion#) REFERENCES AVION(AV#) );

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 109

    4.7 Cration d'un index

    Gnralits

    Les index permettent d'accder plus rapidement aux donnes. Ils servent galement grer l'unicit des cls primaires : un index UNIQUE est cr implicitement sur la ou les colonnes identifiant la cl primaire.

    Les index sont stocks dans une structure externe la table. On peut crer plusieurs index sur une table.

    Les index sont mis jour par ORACLE lors des ordres INSERT, UPDATE, DELETE.

    Syntaxe CREATE [UNIQUE] INDEX nom_index ON nom_table(colonne, colonne, ...) ;

    Paramtres et mots cls Unique : index unique Nom_index : nom de l'index crer Nom_table : nom de la table de la ou des colonne(s) Colonne, colonne, : la ou les colonnes sur lesquelles l'index est dfini.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 110

    4.7 Cration d'un index

    Exemples

    Exemple 1 : index non unique

    Create index idx_sal_pilote ON pilote (sal);

    Exemple 2 : index unique

    Create Unique index idx_plnom_pilote ON pilote (plnom);

    Exemple 3 : index concatn

    Create index idx_plnom_sal_pilote ON pilote (plnom, sal);

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 111

    EXERCICES Srie 9

    "Crer une relation FORMATION, qui contiendra les renseignements suivants : - le numro de pilote , - le type de formation (ATT, VDN, PAI, ...) - type d'appareil - date de la formation " Attention : - un pilote une date donne participe une formation - un type d'appareil doit tre : 'A300', 'A310', 'A320', 'B707', 'Caravelle', 'B727' ou 'Concorde' Crer la cl primaire (comme en V6 : sans utiliser la clause PRIMARY KEY) sur le numro du pilote et la date de formation.

    Crer un index unique sur la colonne PLNOM de PILOTE. Que constatez vous.

    Crer galement un index sur la colonne AVTYPE de la table FORMATION.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 112

    4.8 Modification dune table

    La modification d'une table est possible travers la clause ALTER TABLE.

    ALTER TABLE [.] ...

    La clause ALTER TABLE permet :

    1. d'ajouter de nouvelles colonnes

    ALTER TABLE [.] ADD ...

    Exemple Alter table Pilote Add (age number(3)) ;

    2. d'ajouter de nouvelles contraintes d'intgrit

    ALTER TABLE [.] ADD ...

    Exemple Alter table Pilote Add chk_pilote_age Check (age Between 25 AND 70);

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 113

    4.8 Modification dune table (suite)

    La clause ALTER TABLE permet (suite):

    3. de redfinir une colonne (type de donnes, taille, valeur par dfaut)

    ALTER TABLE [.] MODIFY ...

    avec : (colonne[typeDeDonnes] [DEFAULTexpr] contrainteAuNiveauColonne]) ;

    Exemple Alter Table Pilote Modify (sal number(7,2));

    Alter Table Pilote Modify (sal number(7,2) not null);

    Alter Table Pilote Modify (adr Default 'Nice');

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 114

    4.8 Modification dune table (suite)

    La clause ALTER TABLE permet (suite):

    Note : - NOT NULL est la seule contrainte pouvant tre ajoute

    par MODIFY. Des valeurs nulles ne doivent pas dj avoir t stockes

    - La taille dune colonne ne peut tre rduite si des donnes existent dans la table.

    4. de modifier les paramtres de stockages (voir cours administration)

    5. d'allouer explicitement des extensions dans des fichiers prcis(voir cours d'admnistration)

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 115

    4. de supprimer une colonne (type de donnes, taille, valeur par dfaut)

    ALTER TABLE [.] DROP Column {col | ( col1, col2, , coln)}

    Exemple

    Alter table Pilote Drop column age;

    Alter table Pilote Drop column (age, sal);

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 116

    4.8 Modification dune table (suite)

    La clause ALTER TABLE permet (suite):

    6. d'activer/dsactiver/supprimer une contrainte d'intgrit

    ALTER TABLE [.] ENABLE | DISABLE | DROP ... avec : UNIQUE (col1[,col2 ...]) [CASCADE] | PRIMARY KEY [CASCADE] | CONSTRAINT [CASCADE]

    Paramtres et mots cls :

    ENABLE : active une contrainte DISABLE : dsactive une contrainte DROP : supprime une contrainte CASCADE: dsactive les contraintes dpendantes

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 117

    4.8 Modification dune table (suite)

    La clause ALTER TABLE permet (suite):

    6. d'activer/dsactiver/supprimer une contrainte d'intgrit (suite)

    Exemple

    1. Dsactivation d'une contrainte

    Alter Table Pilote Disable Constraint pk_pilote_pl# cascade ;

    2. Activation d'une contrainte

    Alter Table Pilote enable Constraint pk_pilote_pl# ;

    3. Suppression d'une contrainte

    Alter Table Pilote Drop Constraint pk_pilote_pl#;

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 118

    4.8 Modification dune table (suite)

    Restrictions aux modifications des tables

    1. AJOUT

    - on peut ajouter une colonne de type NOT NULL uniquement si la table est vide

    - on peut ajouter une contrainte uniquement au niveau table

    2. MODIFICATION

    - on peut retrcir une colonne uniquement si elle est vide

    - on peut passer une colonne de NULL autoris NOT NULL uniquement si la colonne ne contient pas de valeur NULL

    - on ne peut modifier une contrainte

    3. SUPPRESSION

    - on peut supprimer une contrainte par son nom

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 119

    4.9 Dfinition des commentaires

    Commentaires sur les tables ou les colonnes

    Le commentaire sur une colonne se fait par la clause SQL suivante :

    COMMENT ON TABLE nom_table | COLUMN table.colonne IS chane ;

    Note : les commentaires sont insrs dans le Dictionnaire de Donnes.Leur consultation se fait entre autre travers la vue USER_COL_COMMENTS.

    Exemple :

    SQL> COMMENT ON COLUMN pilote.pl# IS 'Numro identifiant le pilote';

    Pour supprimer un commentaire :

    SQL> COMMENT ON COLUMN pilote.pl# IS '';

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 120

    4.10 Consultation de la structure dune table

    Consultation de la structure dune table

    Clause de listage des colonnes dune table :

    DESC[RIBE] [user.]nom_table ;

    La clause DESCRIBE permet de lister les colonnes dune table. L'utilisateur doit tre propritaire de la table ou en avoir reu les droits.

    Exemple:

    SQL> DESC pilote; Name Null? Type PL# NOT NULL NUMBER(4) PLNOM NOT NULL VARCHAR2(12) DNAISS NOT NULL DATE ADR VARCHAR2(20) TEL VARCHAR2(12) SAL NOT NULL NUMBER(9,2)

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 121

    4.11 Cration d'un synonyme

    Synonyme d'une table

    Un synonyme est utilis pour la scurit et la facilit de manipulation.

    Syntaxe CREATE [PUBLIC] SYNONYM [.] FOR [.] ;

    Paramtres et mots cls NomSynonyme : nom du synonyme

    NomTable : nom de la table rebaptiser. Public : le synonyme est accessible par tous les users.

    ATTENTION : son utilisation abusive augmente le temps d'excution des requtes.

    Notes sur le synonyme: - sert rfrencer les objets sans indiquer leur propritaire - sert rfrencer les objets sans indiquer leur base - fournit un autre nom un objet : alias - un synonyme priv doit avoir un nom distinct dans le schma d'un utilisateur - un synonyme public peut avoir le nom de la table dans son schma.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 122

    4.11 Cration d'un synonyme (suite)

    Synonyme dune table

    Exemple

    CREATE PUBLIC SYNONYM Vol FOR scott.vol;

    Remarque : on peut galement crer des synonymes pour des vues, squences, procdures, ... et mme synonymes.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 123

    4.12 Les squence

    Gnralits

    1. une squence est un gnrateur de nombre unique

    2. permet de gnrer des cls primaires

    3. diminue le cot de codage des applications

    Cration d'une squence

    Syntaxe

    CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]

    Paramtres et mots cls Sequence : nom de la squence INCREMENT BY n : incrter de n en n START WITH n : dmarrer partir de n

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 124

    4.12 les squences(suite)

    Cration d'une squence (suite)

    Paramtres et mots cls (suite)

    MAXVALUE n : spcifie la valeur maximale d'une squence

    NOMAXVALUE : valeur maximale 10^27 pour une squence ascendante et 1 pour une squence descendante

    MINVALUE n : spcifie la valeur minimale d'une squence

    NOMINVALUE : valeur minimale de 1 pour une squence ascendante et -(10^26) pour une squence descendante

    CYCLE : continue gnrer les valeurs mme si le min ou le max sont attteints

    NOCYCLE : plus de gnration de valeur si min ou max sont atteints

    CACHE n NOCACHE : spcifie le nombre de valeurs

    prallouer

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 125

    4.12 les squences(suite)

    Exemple de cration d'une squence

    Create Sequence seq_pilote_pl# INCREATE BY 1 START WITH 1 MAXVALUE 2000 CACHE 10 NOCYCLE;

    NEXTVAL et CURRVAL

    Nextval : rend la prochaine valeur disponible de la squence

    Currval : rend la valeur courante de la squence

    Utilisation des Squence

    -- insertion dans une table

    INSERT INTO Pilote Values (seq_pilote_pl#.nextval, 'Bill', );

    -- consultation de la valeur courante Select seq_pilote_pl#.currval From dual;

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 126

    EXERCICES Srie 10

    "Ajouter la colonne AGE la table PILOTE. Un pilote doit avoir entre 25 et 60 ans.

    "Ajouter une contrainte d'intgrit de rfrence au niveau table la relation FORMATION (colonne PILOTE)"

    "Modifier la colonne PL# de la table PILOTE en number(5).

    Ajouter une valeur par dfaut la colonne VD dans VOL.

    "Associer l'attribut SALAIRE d'un pilote un commentaire puis s'assurer de son existence. Comment supprime - t-on un commentaire ?"

    "Consulter la liste des colonnes de la table FORMATION"

    "Attribuer un synonyme "Conducteurs" la table PILOTE.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 127

    4.13 Le dictionnaire de donnes

    Gnralits

    Chaque base de donnes Oracle possde un dictionnaire de donnes : il rpertorie tous les objets de la base et leur dfinition.

    Le dictionnaire de donnes est un ensemble de tables dans lesquelles sont stockes les informations sur les schmas des utilisateurs.

    Le propritaire des tables systmes sous Oracle s'appelle SYS.

    Le dictionnaire de donnes est mis jour dynamiquement par ORACLE.

    Un des avantages des bases de donnes relationnelles est que l'accs aux informations du dictionnaire se fait travers la clause SELECT-FROM-WHERE.

    Pour faciliter la consutation via SQL, il existe des vues et des synonymes systmes

    ATTENTION, l'utilisateur n'accdera aux informations que sur ses objets ou ceux sur lesquels il les GRANTS ncessaires.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 128

    4.13 Le dictionnaire de donnes (suite)

    Les tables de bases

    - seg$ : segments dfinis dans la base de donnes

    - obj$ : objets dfinis sur la base de donnes

    - tab$ : tables dfinies dans la base de donnes y compris les clusters

    - ind$ : index dfinis dans la base de donnes

    - col$ : colonnes dfinies dans la base de donnes

    - ts$ : tablespaces dfinis dans la base de donnes

    - ...

    Notes :

    - tables accessibles uniquement par l'utilisateur SYS. - tables se terminant par un $ - il est interdit de mettre jour directement ces tables.

  • Cours SQL & PL/SQL ORACLE - G. Mopolo - Copy Write - PAGE 129

    4.13 Le dictionnaire de donnes (suite)

    Les vues

    - accessible_tables : contient les tables et vues accessibles par lutilisateur

    - all_catalog : tables, vues , synonym, ... accessibles par le user

    - all_tab_columns : synonyme de la table accessible_table

    - all_tab_grants : synonyme de la table table_privileges

    - all_tables : description des tables accessibles par un user

    - all_users : informations sur lensemble des users dune base - all_views : textes des vues accessibles par un utilisateur