Cours de
Objectifs du cours
Comprendre larchitecture du SGBD Oracle Construire une base de donnes sous Oracle Administrer une base de donnes Manipuler les donnes avec SQL Ecrire des programmes en PL/SQL
La mise en pratique en TP
Plan du cours
Le langage PL/SQL
Introduction Gnrale
Introduction
SGBD
Un systme de gestion de bases de donnes (SGBD) est un logiciel qui permet dinteragir avec une base de donnes Un SGBD est un logiciel permettant de :
- Dcrire - Manipuler - Consulter les donnes - Dfinir des contraintes dintgrits en assurant - la confidentialit - lintgrit - la scurit - le partage des donnes
Introduction
Indpendance physique (1) : Plus besoin de travailler directement sur les fichiers physiques (tels quils sont enregistrs sur disque). Un SGBD nous permet de dcrire les donnes et les liens entre elles dune faon logique sans se soucier du comment cela va se faire physiquement dans les fichiers. On parle alors dimage logique de la base de donnes, (ou aussi description logique ou conceptuelle ou encore de schma logique).
Ce schma est dcrit dans un modle de donnes par exemple le modle de tables, appel le modle relationnel.
Introduction
Indpendance physique (2) : La manipulation des donnes doit tre facilite en travaillant directement sur le schma logique. On peut insrer, supprimer, modifier des donnes directement sur limage logique. Le SGBD va soccuper de faire le travail sur les fichiers physiques.
Indpendance logique : Un mme ensemble de donnes peut tre vu diffremment par des utilisateurs diffrents. Toutes ces visions personnelles des donnes doivent tre intgrs dans une vision globale. Manipulations des donnes par des non informaticiens : Il faut pouvoir accder aux donnes sans savoir programmer, ce qui signifie des langages quasi naturels .
Efficacit des accs aux donnes : Ces langages doivent permettre dobtenir des rponses aux interrogations en un temps raisonnable . Il doivent donc tre optimiss et, entre autres, il faut un mcanisme permettant de minimiser le nombre daccs disques. Tout ceci, bien sur, de faon compltement transparente pour lutilisateur.
Riadh HADJ MTIR 2011/2012
Introduction
Administration centralise des donnes : Des visions diffrentes des donnes (entre autres) se rsolvent plus facilement si les donnes sont administres de faon centralise.
Cohrence des donnes : Les donnes sont soumises un certain nombre de contraintes dintgrit qui dfinissent un tat cohrent de la base. Elles doivent pouvoir tre exprimes simplement et vrifies automatiquement chaque insertion, modification ou suppression de donnes, par exemple :
lge dune personne suprieur zro Salaire suprieur zro Etc.
Ds que lon essaye de saisir une valeur qui ne respecte pas cette contrainte, le SGBD le refuse.
Introduction
Non redondance des donnes : Afin dviter les problmes lors des mises jour, chaque donne ne doit tre prsente quune seule fois dans la base.
Partageabilit des donnes : Il sagit de permettre plusieurs utilisateurs daccder aux mmes donnes au mme moment. Si ce problme est simple rsoudre quand il sagit uniquement dinterrogations et quand on est dans un contexte monoutilisateur, cela nest plus le cas quand il sagit de modifications dans un contexte multiutilisateurs. Il sagit alors de pouvoir :
Permettre deux (ou plus) utilisateurs de modifier la mme donne en mme temps ; Assurer un rsultat dinterrogation cohrent pour un utilisateur consultant une table pendant quun autre la modifie.
Introduction
Scurit des donnes : Les donnes doivent pouvoir tre protges contre les accs non autoriss. Pour cela, il faut pouvoir associer chaque utilisateur des droits daccs aux donnes.
Rsistance aux pannes : Que se passetil si une panne survient au milieu dune modification, si certains fichiers contenant les donnes deviennent illisibles? Les pannes, bien qutant assez rares, se produisent quand mme de temps en temps. Il faut pouvoir, lorsque lune delles arrive, rcuprer une base dans un tat sain . Ainsi, aprs une panne intervenant au milieu dune modification deux solutions sont possibles :
soit rcuprer les donnes dans ltat dans lequel elles taient avant la modification, soit terminer lopration interrompue.
10
Introduction
Description des donnes : codification structuration, grce un Langage de Description de Donnes (LDD)
Introduction
Terminaux
Programmes
Gestionnaire de fichiers
12
Introduction
Niveau externe: le niveau dexpression des besoins des users. Il formalise la manire dont les utilisateurs voient les donnes.
Environnement de deboggueurs / programmation / interfaces graphiques /
Niveau conceptuel: dcrit la structure de la base de donnes globalement tous les utilisateurs (limite la redondance) .
Compilation / optimisation des requtes / maintien de lintgrit / gestion de la confidentialit.
Niveau interne: relatif la mmoire physique Gestion de la mmoire secondaire (fichiers), schma, index Gestion de la concurrence Reprise aprs panne
Riadh HADJ MTIR 2011/2012
13
Introduction
Niveau Externe (vue dun user)
Schma A
Schma B
Schma C
Correspondance externe/conceptuelle Niveau Conceptuel Description Unique Correspondance Conceptuelle/physique Niveau Interne (vue physique) Schma interne
14
Introduction
Indpendance physique: on peut modifier lorganisation des donnes sans toucher les programmes de traitement. Limiter les modifications lies aux changements de matriel, de systme dexploitation ou des logiciels utiliss.
Indpendance logique: une modification de lorganisation logique des fichiers (e.g. une nouvelle rubrique) nentrane pas de modification dans les programmes dapplication non concerns.
15
Introduction
SGBD Hirarchique:
Modles de SGBD
Les donnes sont reprsentes dans la base sous forme de structure arborescente. Manipulation des donnes (balayage ascendant/descendant). E. g. IMS-IBM
SGBD rseau:
Les donnes sont reprsentes dans la base sous forme d un graphe quelconque. Les programmes: ne sont pas indpendants de la structure logique de la base doivent indiquer le chemin daccs aux donnes utilisent un langage complexe pour travailler avec leurs donnes.
fond sur la thorie mathmatique des relations; reprsentation trs simple des donnes (tables); langage non procdural (dclaratif), puissant et simple demploi SQL est un standard parmi ces langages dominent le march: Exemples : Oracle, DB2, SQLServer, Access, DBase, Paradox, etc.
enregistre les donnes sous forme dobjets E. g. O2
SGBD relationnel:
SGBD Objet:
16
LE SGBD ORACLE
17
18
19
Structures de stockage
20
21
Structures mmoire Oracle (1) Les structures mmoire de base associes une instance Oracle sont :
Mmoire SGA (System Global Area) : partage par tous les processus serveur et processus en arrire-plan est une zone de mmoire contenant les donnes
et les informations de contrle de l'instance
Mmoire PGA (Program Global Area) : propre chaque serveur et processus en arrire-plan il existe une mmoire PGA pour chaque
processus
22
Processus serveur 1
PGA
Processus serveur 2
PGA
Processus en arrire-plan
PGA
Tampon de journalisation
23
24
Zone de mmoire Java : zone utilise pour l'ensemble du code Java et des donnes propres la session dans la JVM (Java Virtual Machine) Zone de mmoire Streams : zone utilise par Oracle Streams (pour la rplication)
25
26
Processus serveur
Processus serveur
Processus serveur
Processus serveur
LogWriter (LGWR)
Processus en arrire-plan
Riadh HADJ MTIR 2011/2012
27
Point de reprise (CKPT) : met jour l'ensemble des fichiers de donnes et de contrle de la base afin d'indiquer le point de reprise le plus rcent.
LogWriter (LGWR) : crit les entres de journalisation sur le disque. Processus d'archivage (ARCn) : copie les fichiers de journalisation (fichiers redo log) dans le lieu destin au stockage des archives lorsqu'un changement de fichier de journalisation se produit.
Riadh HADJ MTIR 2011/2012
28
Instance SGA
Tampon de journalisation
3 2
Processus utilisateur
LogWriter (LGWR)
Fichiers de donnes
Fichiers de journalisation
29
Une instance a t dmarre sur l'ordinateur excutant Oracle (souvent appel hte ou serveur de base de donnes). L'ordinateur excutant l'application (ordinateur local ou poste client) utilise un processus utilisateur. L'application client tente d'tablir une connexion avec l'instance en utilisant le pilote Oracle Net Services.
L'instance dtecte la demande de connexion manant de l'application et se connecte un processus serveur pour le compte du processus utilisateur.
30
Instance
SGA 5 7
Cache de tampons de la base de donnes Tampon de journalisation Processus d'archivage (ARCn)
10
Processus utilisateur
Processus serveur
LogWriter (LGWR)
9 6
Fichiers de donnes
31
L'utilisateur met jour une ligne Le processus serveur reoit l'instruction et vrifie si elle se trouve dj dans la zone de mmoire partage de la mmoire SGA
Si une zone SQL partage est dtecte, le processus serveur vrifie les privilges d'accs de l'utilisateur par rapport aux donnes demandes et la zone SQL partage existante est utilise pour le traitement de l'instruction. Si l'instruction ne se trouve pas dans la zone de mmoire partage, une nouvelle zone SQL partage est alloue pour celle-ci afin qu'elle puisse tre analyse et traite.
Le processus serveur extrait les valeurs des donnes ncessaires du fichier de donnes (table) ou des blocs de donnes stocks dans la mmoire SGA
32
Lorsque la transaction est valide (commit), le processus LGWR enregistre immdiatement la transaction dans le fichier de journalisation (fichier redo log).
Le processus DBWn crit les blocs modifis sur le disque lorsque cela s'avre utile. Le processus serveur envoie un message de succs ou d'erreur l'application via le rseau.
10
33
Fichiers de contrle
Fichiers de donnes
Fichier de paramtres
Fichiers de sauvegarde
Fichiers de donnes : contiennent les donnes utilisateur ou les donnes d'application de la base.
Fichiers de journalisation en ligne : permettent la rcupration d'une instance de base de donnes. S'il se produit une panne de la base sans perte des fichiers de donnes, l'instance peut rcuprer la base grce aux informations contenues dans ces fichiers.
35
Fichiers de sauvegarde : ces fichiers sont utiliss pour la rcupration de la base de donnes. Les fichiers de sauvegarde sont gnralement restaurs lorsqu'une dfaillance physique ou une erreur utilisateur a endommag ou supprim les fichiers d'origine.
36
Fichiers de journalisation archivs : contiennent l'historique complet des modifications de donnes (informations de journalisation) gnres par l'instance.
Vous pouvez, l'aide de ces fichiers et d'une sauvegarde de la base, restaurer un fichier de donnes perdu.
Les fichiers de journalisation archivs permettent de rcuprer des fichiers de donnes restaurs.
Fichiers trace : chaque processus serveur et chaque processus en arrire-plan peut crire dans un fichier trace associ.
Lorsqu'une erreur interne est dtecte par un processus, ce dernier procde un dump des informations sur l'erreur vers son fichier trace.
Certaines informations crites dans un fichier trace sont destines l'administrateur de base de donnes, tandis que d'autres s'adressent aux services de support technique Oracle. .
Fichiers dalertes : sont des fichiers trace spcifiques. Le fichier d'alertes d'une base de donnes est un journal chronologique des messages et des erreurs. Oracle recommande de consulter ces fichiers.
Riadh HADJ MTIR 2011/2012
37
Une base de donnes Oracle est un ensemble de donnes trait comme un tout. L'objectif gnral d'une base de donnes est de stocker et d'extraire des informations associes. Une base de donnes comprend des structures logiques et des structures physiques
Riadh HADJ MTIR 2011/2012
38
Structures logiques
Base de donnes
Structures physiques
Schma
Tablespace
Fichier de donnes
Segment
Extent
39
Tablespaces Une base de donnes est divise en units de stockage logiques appeles tablespaces, qui regroupent des structures logiques associes. Par exemple, les tablespaces regroupent habituellement tous les objets d'une application pour simplifier certaines oprations d'administration. Vous pouvez disposer d'un premier tablespace pour les donnes d'application et d'un second pour les index d'application.
40
Schmas
Un schma est un ensemble d'objets de base de donnes appartenant un utilisateur de la base. Les objets de schma sont les structures logiques qui font directement rfrence aux donnes de la base. Par exemple, ces structures peuvent tre des tables, des vues, des squences, des procdures stockes, des synonymes, des index, des clusters et des liens de base de donnes. En gnral, les objets de schma incluent tout ce que l'application cre dans la base de donnes.
41
Blocs de Donnes Au niveau de dtail le plus fin, les donnes d'une base Oracle sont stockes dans des blocs de donnes. Un bloc de donnes correspond un nombre d'octets spcifique d'espace physique sur le disque. La taille du bloc de donnes est indique pour chaque tablespace lors de la cration de celui-ci. Chaque base utilise et alloue de l'espace libre de base de donnes dans les blocs de donnes Oracle.
Riadh HADJ MTIR 2011/2012
42
Extents Extents (ensembles de blocs contigus) Le niveau logique d'une base de donnes s'appelle un extent. Un extent est un nombre dfini de blocs de donnes contigus (obtenus par une allocation unique) permettant de stocker un type spcifique d'informations.
43
Segments Le niveau logique de stockage situ au-dessus d'un extent s'appelle un segment. Un segment est un ensemble d'extents allous pour une certaine structure logique.
Seuls les objets 'physiques' peuvent tre des segments. Ainsi une vue ou un synonyme n'est pas un segment...
44
Segments (2)
Les diffrents types de segment :
Segments de donnes : Chaque table comporte un segment de donnes. Toutes les donnes de la table sont stockes dans les extents de son segment de donnes. Segments d'index : Chaque index comporte un segment d'index qui stocke l'ensemble de ses donnes. Segments d'annulation (rollback segment) : qui stocke l'image avant modification des donnes.
Un tablespace UNDO est cr par l'administrateur de base de donnes afin de stocker temporairement les informations d'annulation. Les informations contenues dans un segment d'annulation permettent de gnrer des informations de base de donnes cohrentes en lecture et, lors de la rcupration de la base, d'annuler les transactions non valides pour les utilisateurs.
Segments temporaires : La base de donnes Oracle cre des segments temporaires lorsqu'une instruction SQL requiert une zone de travail temporaire pour son excution (tri par exemple).
Lorsque l'excution de l'instruction est termine, les extents du segment temporaire sont rendus l'instance en vue d'une utilisation ultrieure. On peut indiquer un tablespace temporaire par dfaut pour chaque utilisateur ou l'chelle de la base de donnes.
Riadh HADJ MTIR 2011/2012
45
BD Oracle
Structures mmoire
Mmoire SGA (System Global Area) : cache de tampons (buffer cache) de la base de donnes, tampon de journalisation (redo buffer) et diffrents pools Mmoire PGA (Program Global Area)
Processus
Processus utilisateur et processus serveur Processus en arrire-plan : SMON, PMON, DBWn, CKPT, LGWR, ARCn, etc.
Structures de stockage
Structures logiques : base de donnes, schmas, tablespaces, segments, extents et blocs Oracle Structures physiques : fichiers de donnes, fichiers de paramtres, fichiers de journalisation et blocs du systme d'exploitation
Riadh HADJ MTIR 2011/2012
46
Une instance Oracle = Ensemble des zones mmoires + Processus allous une base de donnes
47
48
Il est possible de dmarrer les bases de donnes avec les commandes suivantes:
SQL> startup {nomount | mount} SQL> alter database mount; SQL> alter database open;
49
Gestion dune instance (4) Arrt dune base de donnes Oracle : 4 types darrt
Normal Transactionnel Immediate Abort
50
Modes darrt
51
52
Les privilges sont des droits pour excuter des requtes Le plus haut niveau de privilges sont des privilges DBA, il a la possibilit de donner aux utilisateurs laccs la base de donnes Les utilisateurs doivent possder des privilges systme pour se connecter la base de donnes, et les privilges objets pour manipuler des donnes
Riadh HADJ MTIR 2011/2012
53
54
55
Crer un utilisateur
Un DBA peut crer des utilisateurs en utilisant la requte CREATE USER Lorsquun utilisateur est cr, il ne possde aucun privilge. Le DBA doit lui donner des privilges souhaits
56
Lorsque le DBA a cr un utilisateur, il lui donne des privilges Exemple : Le DBA donne lutilisateur la possibilit de se connecter la base de donnes. Ce privilge est donn grce CREATE SESSION
57
58
Accorder un privilge
59
60
Un rle est un ensemble de privilges Lorsque le rle est cr, le DBA utilise la requte GRANT pour assigner ce rle aux utilisateurs
61
62
63
64
65
Le privilge accord avec la clause WITH GRANT OPTION donne la possibilit au nouvel utilisateur daccorder les privilges sur cet objet aux autres utilisateurs Si vous enlevez ensuite le privilge cet utilisateur, tous les utilisateurs qui il aura donn ce privilge se le verront enlev aussi de manire automatique
66
67
68
69
Prsentation
SQL (Structured Query Language) ou langage de requtes structur est un langage destin interroger et manipuler les SGBDR Il a t introduit par IBM en 1979 Le langage SQL est devenu Standard ANSI en 86 et ISO en 87 Plusieurs rvisions: SQL1 en 1989, SQL2 en 1992 en , SQL3 en 1999 et SQL2003
70
Prsentation (suite)
71
72
Types de donnes
NUMBER CHAR Chiffre
Description
Chane de caractres
VARCHAR2
DATE
73
);
Riadh HADJ MTIR 2011/2012
74
Colloque (nomC, universiteC, adresseC, dateC) Participant(numeroP, nomP, prenomP, adresseP) Organisateur (numeroP#, telephone, nomC#) Conferencier (numeroP#, institition) Expose (titre, resume) Inscrit (numeroP#, nomC#, droitinscription) Programme(nomC#, numeroP#, titre#)
75
CREATE TABLE participant( numeroP number(5), nomP char(30), prenomP char(30), addressP char(50) );
76
CREATE TABLE participant( numeroP number(5) PRIMARY KEY, nomP char(30) NOT NULL, prenomP char(30), addressP char(50) );
77
78
Modification de tables
Exemple:
ALTER TABLE participant MODIFY(numeroP number(3));
79
Suppression de contraintes
80
La requte SELECT
81
82
83
Les doublons
84
85
Il est possible de trier les donnes l'aide de la clause ORDER BY suivie de la liste des attributs servant comme critre de tri
Exemple :
Select * from participant ORDER BY nomP, prenomP
86
La clause WHERE
Dans la clause WHERE on spcifie une condition portant sur les attributs des relations mentionnes par la clause FROM
Les oprateurs utiliss:
AND, OR et NOT
Les oprateurs de comparaison (<,>,<=,>=, <>) BETWEEN pour les intervalles IN pour un ensemble de valeurs
87
88
SQL ne distingue pas entre les minuscules et majuscules pour les mots cls. Ceci n'est pas vrai pour les valeurs, 'Tunisie' est diffrente de 'TUNISIE'
SQL fournit des options pour les recherches par motif (pattern) l'aide de la clause LIKE
'%' dsigne n'importe qu'elle chane de caractres '_' dsigne une lettre
89
90
Les dates
91
Les valeurs de certains attributs sont inconnus. Ils sont mis NULL Toute comparaison avec NULL donne un rsultat qui n'est ni vrai ni faux mais une troisime valeur UNKNOWN NULL est un mot cl et non pas une constante
TRUE 1 UNKNOWN FALSE 0
Riadh HADJ MTIR 2011/2012
92
93
Les requtes SQL dcrites dans cette section permettent de manipuler simultanment plusieurs tables et d'exprimer des oprateurs d'algbre relationnelle:
jointure, union, intersection, ...
94
Jointures
Une jointure permet d'exprimer des requtes portant sur des donnes rparties sur plusieurs tables Exemple: Donner le nom et prnom de tous les participants d'un colloque
Select NomP, PrenomP from Inscrit, Participant where Inscrit.NumeroP = Participant. NumeroP and NomC='Colloque1';
Riadh HADJ MTIR 2011/2012
95
Jointures (2)
Dans l'ambigut (deux attributs ayant le mme nom), on met le nom du table comme prfixe Comme ce n'est pas pratique de recopier intgralement le nom d'une table, on peut dfinir et utiliser des synonymes Exemple:
Select NomP, PrenomP from Inscrit as I, Participant as P where I.NumeroP = P.NumeroP and NomC='Colloque1';
96
Jointures (3)
97
98
Requtes imbriques
Le rsultat dune requte sert comme condition dans la deuxime requte Ces types de requtes peuvent porter sur plusieurs tables
99
100
101
Agrgation
Les fonctions d'agrgation permettent de faire des oprations sur une slection de champ Elles effectuent un calcul sur un ensemble de valeurs et retournent une valeur unique l'exception de COUNT, les fonctions d'agrgation ignorent les valeurs NULL COUNT : nombre de lignes, ou de valeurs non nulles MAX : calcule la valeur maximale d'une colonne MIN : calcule la valeur minimale d'une colonne AVG : calcule la moyenne dune colonne SUM : calcule la somme sur une colonne Les fonctions d'agrgation sont souvent utilises avec la clause GROUP BY de l'instruction SELECT
Riadh HADJ MTIR 2011/2012
102
Agrgation : exemples
Select count (NomC) From colloque; Select sum (droitinscription) From inscrit Where NumeroP = 100;
Select count(numStation), AVG (tarif), MAX (tarif), MIN (tarif) From Station;
103
La clause GROUP BY
Construit des groupes en associant les tuples partageant la mme valeur pour une ou plusieurs colonnes
Exemple:
Select universite, count (NomC) from colloque Group by universite;
104
La clause HAVING
105
106
Delete from Participant where NumeroP = 1210; Delete from colloque where NomC = JAE;
107
Mise jour dune table : Modification Update R set a1=v1, a2=v2, aN=vN;
Exemple : Update inscrit set droitinscription = droitinscription/6.52; Update colloque set universite = monastir;
108
Les vues
Une vue est une sorte de fentre par laquelle des donnes peuvent tre slectionnes et changes Une vue restreint laccs aux donnes Une vue peut tre utilise pour construire des requtes CREATE VIEW nom_vue AS requte;
109
110
111
112
Exemple:
SELECT customer_name, city FROM T_Customer;
customer_name ------------------------Contemporary Casuals Value Furniture Home Furnishings Eastern Furniture Impressions Furniture Gallery Period Furnishings California Classics M & H Casual Furniture Seminole Interiors American Euro Lifestyles Battle Creek Furniture Heritage Furnishings Kaneohe Homes Mountain Scenes
Riadh HADJ MTIR 2011/2012
city --------------Gainsville Plano Albany Carteret Sacramento Boulder Seattle Santa Clara Clearwater Seminole Prospect Park Battle Creek Carlisle Kaneohe Ogden
113
Exemples:
SELECT customer_name, city FROM T_Customer ORDER BY customer_name;
customer_name ------------------------American Euro Lifestyles Battle Creek Furniture California Classics Contemporary Casuals Eastern Furniture Furniture Gallery Heritage Furnishings Home Furnishings Impressions Kaneohe Homes M & H Casual Furniture Mountain Scenes Period Furnishings Seminole Interiors Value Furniture
Riadh HADJ MTIR 2011/2012
city -------------Prospect Park Battle Creek Santa Clara Gainsville Carteret Boulder Carlisle Albany Sacramento Kaneohe Clearwater Ogden Seattle Seminole Plano
Expressions numriques
Oprations
addition (+), soustraction (-) multiplication (*), division (/) modulo (%)
Ordre d'valuation
1 - parenthses 2 - multiplication et division de gauche droite 3 - addition et soustraction de gauche droite
115
Exemple:
SELECT Material_ID, unit_price, unit_price*1.12 FROM T_Raws_Materials;
Material_ID --------------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Riadh HADJ MTIR 2011/2012
Unit_price --------------7,89 12,05 13,67 7,66 7,23 15,19 13,02 15,45 10,88 15,55 8,79 14,26 15,82 13,75 16,72 5,70 7,95 11,13
Unit_price*1.12 --------------8,8368 13,496 15,3104 8,5792 8,0976 17,0128 14,5824 17,304 12,1856 17,416 9,8448 15,9712 17,7184 15,4 18,7264 6,384 8,904 12,4656 116
Exemple:
SELECT customer_name, city || ', ' || state FROM T_Customer ORDER BY city;
customer_name -------------------------Home Furnishings Battle Creek Furniture Furniture Gallery Heritage Furnishings Eastern Furniture M & H Casual Furniture Contemporary Casuals Kaneohe Homes Mountain Scenes Value Furniture American Euro Lifestyles Impressions California Classics Period Furnishings Seminole Interiors
Riadh HADJ MTIR 2011/2012
------------------Albany, NY Battle Creek, MI Boulder, CO Carlisle, PA Carteret, NJ Clearwater, FL Gainsville, FL Kaneohe, HI Ogden, UT Plano, TX Prospect Park, NJ Sacramento, CA Santa Clara, CA Seattle, WA Seminole, FL
117
Les sous-requtes
118
Les sous-requtes SQL permet d'utiliser des requtes pour laborer des conditions plus complexes et "dynamiques"
un critre de recherche employ dans la clause WHERE soit lui mme le rsultat d'un SELECT
Types de sous-requtes
Sous-requtes simples Sous-requtes synchronises
119
Remarque
Les sous-requtes sont plus lisibles que des jointures
120
Remarque
le synonyme e de la requte principale est utilis dans la sous-requte
121
L'oprateur EXISTS permet de construire un prdicat vrai si la sous-requte qui suit ramne au moins une ligne Syntaxe
select --- from nom-table where exists ( select --- )
Exercice
Liste des employs travaillant dans un dpartement qui contient au moins un ANALYSTE ?
122
123
Exercice
slectionner les employs gagnant plus que tous les employs du dpartement 30
Remarque
L'oprateur IN est quivalent l'oprateur = ANY L'oprateur NOT IN est quivalent l'oprateur != ALL
Exercice
slectionner les employs du dpartement "RESEARCH" embauchs le mme jour que quelqu'un du dpartement "SALES"
124
Exercice
slectionner la liste des employs ayant mme job et mme salaire que FORD
Riadh HADJ MTIR 2011/2012
125
126
count (col)
nombre de n-uplet satisfaisant la condition WHERE. Les valeurs NULL sont ignores.
max (col)
valeur maximale des valeurs de la colonne
min (col)
valeur minimale des valeurs de la colonne
sum (col)
somme des valeurs de la colonne
variance (col)
variance des valeurs de la colonne
127
Computer Desk 48
Computer Desk 64
MAX(order_date) -------------05/11/1998
129
130
Regroupement
131
II est possible de subdiviser la table en groupes, chaque groupe tant l'ensemble des lignes ayant une valeur commune.
Syntaxe
group by expr [,expr2 ...]
Exemple
donner la somme des salaires pour chaque dpartement select SUM(SALARY) from EMPLOYEES group by DEPARTEMENT_ID;
Riadh HADJ MTIR 2011/2012
132
NO_CLIENT NO_VENDEUR SUM(MONTANT) --------- ---------- -----------1233 455 493,28 1233 687 132,33 4333 132 32,35 4333 687 137,98 4333 754 122,1 4436 132 100 5026 455 100 5026 687 44,32
NO_CLIENT NO_VENDEUR SUM(MONTANT) --------- ---------- -----------4333 132 32,35 4436 132 100 1233 455 493,28 5026 455 100 1233 687 132,33 4333 687 137,98 5026 687 44,32 4333 754 122,1
133
Regroupement: clause SELECT Dans un regroupement la clause SELECT a deux parties: liste des attributs servant au regroupement liste des fonctions ensemblistes values sur chaque groupe
regroupement
fonctions
134
Regroupement: DISTINCT
NO_CLIENT --------1233 4333 4436 1233 1233 4333 1233 5026 4333 5026
COUNT(DISTINCTNO_CLIENT) -----------------------4
135
Regroupement: clause HAVING La clause HAVING permet, de faon analogue la clause WHERE, de poser des conditions sur le rsultat du regroupement select col1 [,col2 ...] from table1 [, table2] [where prdicat] [group by expression1 [, expression2] [having prdicat] ];
Le prdicat figurant dans la clause HAVING ne peut porter que sur des caractristiques des fonctions de groupe figurant dans la clause GROUP BY
Riadh HADJ MTIR 2011/2012
136
Fonctions individuelles
137
138
lpad(chane, x [,text])
******5000
Tom
139
140
141
142
Conversion de donnes
143
Conversion
144
Conversion
145
146
La fonction NVL
Syntaxe : NVL(expr1,expr2) Fonction : Substituer les valeurs nulles dune colonne par une valeur choisie Exemple
147
La fonction NVL2
Syntaxe : NVL2(expr1,expr2,expr3) Fonction : Afficher expr2 si expr1 est non nulle, sinon afficher expr3 Exemple
148
La fonction NULLIF
Syntaxe : NULLIF(expr1,expr2) Fonction : Afficher NULL si expr1=expr2, sinon afficher expr1 Exemple
149
150
Lexpression CASE
151
Lexpression DECODE
152
153
Oprateurs de comparaison
154
155
156
157
158
159
160
L'oprateur teste si l'attribut a la valeur NULL, c'est dire qu'aucune valeur n'a t fournie. Exemple:
SELECT COUNT(product_id) FROM T_Product WHERE product_description IS NULL;
161
L'oprateur LIKE utilise les caractres spciaux % et _ Le caractre % remplace n'importe quel nombre de n'importe quels caractres
Il remplace 0 n caractres
Les vues
163
164
165
Requtes et vues
Pour rcuprer les donnes de vues, on procdera comme si l'on tait en face d'une table classique select * from EMPLOYES2 En ralit, cette table est virtuelle et est reconstruite chaque appel de la vue EMPLOYES2 par excution du SELECT constituant la dfinition de la vue
166
167
Les squences
168
Squence Une squence est un objet cr par lutilisateur Elle sert crer des valeurs pour les cls primaires, qui sont incrmentes ou dcrmentes par le serveur Oracle Noter que la squence est stocke et gnre indpendamment de la table, et une squence peut tre utilise pour plusieurs tables
169
Squence : cration
170
Squence (3)
Exemple
171
Squence : modification
172
Squence : suppression
173
Index
Un index est un objet qui peut augmenter la vitesse de rcupration des lignes en utilisant les pointeurs Les index peuvent tre crs automatiquement par le serveur Oracle ou manuellement par lutilisateur Ils sont indpendants, donc lorsque vous supprimez ou modifiez un index les tables ne sont pas affectes
174
Index (2)
175
Index (3)
Quand crer un index
La colonne contient une large plage de valeurs La colonne contient plusieurs valeurs nulles Une ou plusieurs colonnes sont frquemment utilises dans la clause WHERE ou pour les conditions de jointure La table est grande et la plupart des requtes recherchent moins de 2-4% des lignes
Synonyme
Un synonyme est un nom alternatif pour dsigner un objet de la base de donnes. C'est aussi un objet de la base de donnes
177
Synonyme (2)
178
Synonyme (3)
179
180
181
Le langage PL/SQL
182
Introduction PL/SQL : Procedural Language with SQL C'est un langage de programmation propritaire (Oracle) inspir de ADA. Ce langage a fortement inspir de la norme SQL3 car il est bien adapt la manipulation d'une base de donne relationnelle
il utilise les mme types que SQL il permet d'intgrer facilement des requtes dans le code il permet de dfinir des curseurs pour parcourir squentiellement le rsultat d'une requte
Riadh HADJ MTIR 2011/2012
183
184
Bloc PL/SQL
185
Structures de contrle
if condition then instr {elsif condition then instr} [else instr] end if ;
case variable {when expression then instr} [else instr] end case;
186
187
Exemple : IF-THEN-ELSE
Dfinir une fonction factorielle :
appel
188
Rgles syntaxiques
Les instructions peuvent tre crites sur plusieurs lignes Les identifiants peuvent contenir jusqu' 30 caractres et doivent :
tre encadrs de guillemets sils contiennent un mot rserv Commencer par une lettre Avoir un nom distinct de celui d'une table ou d'une colonne de la base
189
Gestion PL/SQL
Dclarer et initialiser les variables dans la section dclarative Assigner une valeur une variable Transmettre des valeurs dans les blocs PL/SQL l'aide de paramtres Visualiser les rsultats la console ou dans un fichier : DBMS_OUTPUT.PUT_LINE UTL_FILE
Riadh HADJ MTIR 2011/2012
190
191
192
193
un type collection : TABLE, VARRAY utiliss en relationnel objet un type objet : modle relationnel objet
194
Le type RECORD
Peut contenir un ou plusieurs champs de type scalaire, RECORD ou TABLE Similaire la structure d'enregistrement utilise dans les L3G Traite un ensemble de champs comme une unit logique Pratique pour rcuprer et traiter les donnes d'une table
195
196
197
Lattribut %ROWTYPE
Dclarer une variable partir d'un ensemble de colonnes d'une table ou d'une vue Prfixer %ROWTYPE avec la nom de la table de la base de donnes Les champs dans le RECORD ont les mmes noms et les mmes types de donnes que les colonnes de la table ou de la vue associes
Riadh HADJ MTIR 2011/2012
198
199
Exploitation des requtes SQL Les instructions INSERT, DELETE, UPDATE s'crivent telles quelles dans un programme
Elles peuvent utiliser les variables du programme Il faut donc donner des noms diffrents aux variables du programme et aux colonnes des tables manipules par le programme
Pour une requte dont le rsultat est constitu d'une unique ligne, on peut utiliser la syntaxe SELECT ... INTO.... Pour une requte qui ramne un nombre quelconque de lignes, il faut utiliser un curseur
200
Exemple
create or replace procedure ajouterEmp( leNom.employee.emp_name%type, lePrenom.employee.emp_firstname%type) is nouveauNum NUMBER ; begin select nvl(max(emp_no),0)+1 into nouveauNum from employee ; insert into employee(emp_no, emp_name, emp_firstname) values(nouveauNum, leNom, lePrenom); end ajouterEmp;
Riadh HADJ MTIR 2011/2012
201
SELECT INTO
select emp_name, emp_firstname into le_nom, le_prenom from Employee where emp_no = 346; Ou bien select * into emp_rec from Employee where emp_no = 346; NB : emp_rec de type Employee%rowtype
202
Les Curseurs
Un curseur est une structure de donnes squentielle avec une position courante On utilise un curseur pour parcourir le rsultat d'une requte SQL dans un programme PL/SQL.
On dclare un curseur en associant un nom une requte : CURSOR nom_curseur IS une_requte;
Riadh HADJ MTIR 2011/2012
203
Les Curseurs (2) On peut dfinir des paramtres en entre utiliss dans la requte
CURSOR nom_curseur(p1, ..., pn) IS une_requte ;
Exemple cursor emp_cursor(dnum NUMBER) is select salary, comm from Employee where deptno = dnum ;
Si c est un curseur, la ligne courante est de type c%rowtype, c'est dire du type de la ligne de la requte associe c.
Riadh HADJ MTIR 2011/2012
204
205
206
Attributs du curseur :
%found vrai si le dernier fetch a ramen une ligne %notfound vrai si le dernier fetch n'a pas ramen de ligne %isopen vrai ssi le curseur est ouvert
%rowcount le nombre de lignes dj ramenes
Riadh HADJ MTIR 2011/2012
207
208
209
Avec un curseur implicite, on peut obtenir des informations sur la requte ralise, grce aux attributs.
En effet SQL%attribut applique l'attribut sur la dernire requte SQL excute
210
delete from Employee where ... if SQL%rowcount > 10 then -- on a supprim plus de 10 lignes ... end if ;
211
212
Introduction En PL/SQL, la gestion des erreurs se fait grce aux exceptions Le mcanisme de dclenchement / traitement d'exceptions est identique celui du langage ADA Il existe un certain nombre d'exceptions prdfinies mais le programmeur peut bien sr dfinir ses propres exceptions
213
Syntaxe BEGIN ...corps du bloc... EXCEPTION when exception1 [or exception2 ...] then instructions ; when exception3 [or exception4 ...] then instructions ; ... [when others then instructions ;] END;
Riadh HADJ MTIR 2011/2012
214
Excution des exceptions Si l'exception existe dans une clause When, alors les instructions de cette clause sont excutes et le programme est termin Si l'exception n'existe pas dans une clause When :
Soit il existe une clause When Others et dans ce cas les instructions de cette clause sont excutes et le programme est termin Soit il n'y a pas de clause When Others et l'exception est propage au bloc englobant ou au programme appelant
215
Exemple
DECLARE pe_ratio NUMBER(3,1); BEGIN SELECT prix / gains INTO pe_ratio FROM stocks WHERE symbol = XYZ'; -- pourrait provoquer une erreur de division par zro
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio); EXCEPTION WHEN ZERO_DIVIDE THEN INSERT INTO stats (symbol, ratio) VALUES ('XYZ', NULL); END;
Riadh HADJ MTIR 2011/2012
216
Exceptions prdfinies
TOO_MANY_ROWS : instruction select ... into qui ramne plus d'une ligne.
NO_DATA_FOUND : instruction select ... into qui ne ramne aucune ligne.
217
218
Les exceptions et les codes derreur Les exceptions prdfinies sont associes des codes d'erreur Oracle Lorsqu'une exception n'est pas traite dans le programme PL/SQL, le client qui a appel ce programme reoit le code d'erreur associ Pour lier un nom d'exception un code d'erreur, on peut utiliser la directive :
PRAGMA EXCEPTION_INIT(nomException, codeErreur)
219
Exemple
create procedure detruitCompagnie... restePilote EXCEPTION ; PRAGMA Exception_init(restePilote, -2292); begin delete from compagnie where comp = 'MaCompagnie' ; ... exception when restePilote then ... traitement de l'erreur ... end ;
220
221
Les exceptions et les codes derreur NB: il est aussi possible de dclencher une erreur, sans la lier une exception :
raise_application_error(codeErreur,messageErreur);
le code d'erreur est un entier ngatif compris entre -20999 et -20000 (codes rservs aux erreurs non prdfinies) le message derreur est celui communiqu au client (par exemple, affich sous SQL*Plus)
222
223
Dfinition
Un module stock est un programme rang dans la base de donnes On peut ainsi dfinir en PL/SQL :
des procdures des fonctions des paquetages
Ces programmes peuvent tre appels par les programmes clients, et sont excuts par le serveur
Riadh HADJ MTIR 2011/2012
224
Procdure / Fonction
create or replace procedure p_name [ les_parametres ] is declarations begin code PL/SQL end ;
create or replace function f_name [ les_parametres ] return datatype is Declarations begin code PL/SQL end ;
225
226
Exemple 1 create or replace function nom_dept(numero dept.dept_no%type) return VARCHAR2 is nom dept.dept_name%type ; begin select dept_name into nom from dept where dept_no = numero ; return nom ; end;
227
Exemple 2
create or replace procedure nom_dept2 ( numero IN dept.dept_no%type, nom OUT dept.dept_name%type) is
begin
228
Les packages Un paquetage permet de regrouper un ensemble des procdures, exceptions, constantes... Un paquetage est compos de :
une spcification un corps
La spcification du paquetage contient des lments que l'on rend accessibles tous les utilisateurs du paquetage Le corps du paquetage contient l'implmentation et ce que l'on veut cacher
Riadh HADJ MTIR 2011/2012
229
La spcification contient :
des signatures de procdures et fonctions des constantes et des variables des dfinitions d'exceptions
230
Le corps contient :
Les corps des procdures et fonctions de la spcification (obligatoire) D'autres procdures et fonctions (caches) Des dclarations que l'on veut rendre prives Un bloc d'initialisation du paquetage si ncessaire
Riadh HADJ MTIR 2011/2012
231
232
233
234
Dfinition
235
Syntaxe
CREATE [OR REPLACE] TRIGGER nom_trigger instant liste_evts ON nom_table [FOR EACH ROW] [WHEN ( condition ) ] --Corps instant ::= AFTER | BEFORE liste_evts ::= evt {OR evt} evt ::= DELETE | INSERT | UPDATE [OF { liste_cols }] liste_col ::= nom_col { , nom_col } --corps de pgme PL/SQL
Riadh HADJ MTIR 2011/2012
236
237
After ou Before ?
Si le trigger doit dterminer si l'instruction DML est autorise, utiliser BEFORE Si le trigger doit "fabriquer" la valeur d'une colonne pour pouvoir ensuite la mettre dans la table : utiliser BEFORE
Si on a besoin que l'instruction DML soit termine pour excuter le corps du trigger : utiliser AFTER
238
239
Trigger ligne Dans un trigger ligne, on peut faire rfrence la ligne courante, celle pour laquelle le trigger s'excute Pour cette ligne, on a accs la valeur avant l'instruction DML (nomme :old) et la valeur aprs l'instruction (nomme :new)
:old :new
insert
delete update
Riadh HADJ MTIR 2011/2012
null
ligne supprime ligne avant modif
ligne insre
null ligne aprs modif
240
La clause When
241
Exemple
Create or replace trigger journal_emp after update of salary on EMPLOYEE for each row when (new.salary < old.salary) -- attention, ici on utilise new et pas :new
begin insert into EMP_LOG(emp_id, date_evt, msg) values (:new.empno, sysdate, 'salaire diminu'); end ;
Riadh HADJ MTIR 2011/2012
242
243