Vous êtes sur la page 1sur 243

Systmes de Gestion des Bases de Donnes

Institut Suprieur dInformatique de Mahdia AU : 2011-2012

Cours de

Propos par : Riadh HADJ MTIR Riadh.hadjmtir@riadi.rnu.tn Classe : LAI2

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

Riadh HADJ MTIR 2011/2012

Plan du cours

Introduction Administration dune BD Oracle Le langage SQL

Le langage PL/SQL

Riadh HADJ MTIR 2011/2012

Introduction Gnrale

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

Introduction

Objectifs des SGBD

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.

Riadh HADJ MTIR 2011/2012

Introduction

Objectifs des SGBD (2)

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

Objectifs des SGBD (3)

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.

Riadh HADJ MTIR 2011/2012

Introduction

Objectifs des SGBD (4)

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.

Riadh HADJ MTIR 2011/2012

Introduction

Objectifs des SGBD (5)

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.

Riadh HADJ MTIR 2011/2012

10

Introduction

Fonctionnalits dun SGBD

Description des donnes : codification structuration, grce un Langage de Description de Donnes (LDD)

Manipulation et restitution des donnes (insertion, mise jour, interrogation)


Mise en oeuvre laide dun Langage de Manipulation de Donnes (LMD) S.Q.L. (Structures Query Langage) : Langage standard

Contrle (partage, intgrit, confidentialit, scurit)


Schma = structure + contraintes Formule logique (E.g. Nom character 20, non NULL; age integer between 0 and 120; debit <= credit). But: protger les donnes
11

Riadh HADJ MTIR 2011/2012

Introduction

vision simplifie dun SGBD

SGBD externe SGBD interne

Terminaux

Programmes

Gestionnaire de fichiers

Riadh HADJ MTIR 2011/2012

12

Introduction

Architecture fonctionnelle dun SGBD

Architecture Ansi/Sparc 3 niveaux:

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)

Architecture niveaux ANSI/SPARC

Schma A

Schma B

Schma C

Correspondance externe/conceptuelle Niveau Conceptuel Description Unique Correspondance Conceptuelle/physique Niveau Interne (vue physique) Schma interne

Riadh HADJ MTIR 2011/2012

14

Introduction

Avantages de la sparation en 3 niveaux

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.

la vision de chaque utilisateur est indpendante des visions des


autres utilisateurs et nest pas modifie par les modifications du schma conceptuel qui ne le concernent pas.
Riadh HADJ MTIR 2011/2012

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:

Riadh HADJ MTIR 2011/2012

16

LE SGBD ORACLE

Riadh HADJ MTIR 2011/2012

17

Chapitre 1 DBA (Data Base Administration)

Riadh HADJ MTIR 2011/2012

18

Objectifs du chapitre la fin de ce chapitre, vous pourrez:


Comprendre la structuration du SGBD Oracle Dcrire l'architecture d'Oracle Database

Riadh HADJ MTIR 2011/2012

19

Architecture dune BD Oracle (1)


Structures mmoire

Instance Mmoire SGA (System Global Area)

Processus Processus en arrire-plan

Structures de stockage

Fichiers de base de donnes

Riadh HADJ MTIR 2011/2012

20

Architecture dune BD Oracle (2)

Chaque BD qui sexcute est associ une instance oracle


Une instance oracle est la combinaison dune SGA et de processus oracle en arrire plan

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

22

Structures mmoire Oracle (2)

Processus serveur 1

PGA

Processus serveur 2

PGA

Processus en arrire-plan

PGA

SGA Zone de mmoire partage

Zone de mmoire Streams

Zone de mmoire LARGE POOL

Zone de mmoire Java

Cache de tampons de la base de donnes

Tampon de journalisation

Riadh HADJ MTIR 2011/2012

23

La mmoire SGA (1)


La mmoire SGA contient les structures de donnes suivantes :
Cache de tampons (buffer cache) de la base de donnes : met en mmoire cache les blocs de donnes extraits de la base Tampon de journalisation (redo log buffer) : met en mmoire cache les informations de journalisation (utilises pour la rcupration de l'instance) jusqu' ce qu'elles puissent tre crites dans les fichiers de journalisation physiques stocks sur le disque Zone de mmoire partage (Shared Pool) : met en mmoire cache diverses structures pouvant tre partages par les utilisateurs,
utilise pendant la phase danalyse des ordres SQL passs un processus Oracle, elle contient principalement le cache du dictionnaire de donnes (Dictionnary Cache) et le cache de bibliothques (Library Cache)
Riadh HADJ MTIR 2011/2012

24

La mmoire SGA (2)


Zone de mmoire LARGE POOL : zone facultative fournissant d'importantes allocations mmoire pour certains processus utilisant beaucoup de mmoire, tels que
les oprations de sauvegarde et de rcupration Oracle et les processus serveur d'entre-sortie

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)

Riadh HADJ MTIR 2011/2012

25

Riadh HADJ MTIR 2011/2012

26

Processus Oracle (1)

Processus serveur

Processus serveur

Processus serveur

Processus serveur

Mmoire SGA (System Global Area)

System Monitor (SMON)

Process Monitor (PMON)

Database Writer (DBWn)

Point de reprise (CKPT)

LogWriter (LGWR)

Processus d'archivage (ARCn)

Processus en arrire-plan
Riadh HADJ MTIR 2011/2012

27

Processus Oracle (2)


System Monitor (SMON) : effectue une rcupration aprs panne lorsque l'instance est dmarre aprs une dfaillance.
Process Monitor (PMON) : effectue un nettoyage de processus lorsqu'un processus utilisateur choue. Database Writer (DBWn) : crit les blocs modifis du cache de tampons de la base dans des fichiers de donnes stocks sur disque.

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

Gestion dune instance Oracle (1)


Exemple : Dmarrer une instance de base de donnes Etablir une connexion

Instance SGA

System Monitor (SMON)

Process Monitor (PMON) Processus serveur

Cache de tampons de la base de donnes

Tampon de journalisation

3 2
Processus utilisateur

Database Writer (DBWn)

LogWriter (LGWR)

Fichiers de donnes

Fichiers de journalisation

Riadh HADJ MTIR 2011/2012

29

Gestion dune instance Oracle (1bis)


Lexemple illustre une configuration Oracle dans laquelle l'utilisateur et les processus serveur associs utilisent des ordinateurs distincts (connects entre eux via un rseau)
1

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.

Riadh HADJ MTIR 2011/2012

30

Gestion dune instance Oracle (2)


Exemple : Traiter une instruction SQL

Instance

SGA 5 7
Cache de tampons de la base de donnes Tampon de journalisation Processus d'archivage (ARCn)

10
Processus utilisateur

Processus serveur

Database Writer (DBWn)

Point de reprise (CKPT)

LogWriter (LGWR)

9 6
Fichiers de donnes

L'utilisateur met jour une ligne.

Fichier de Fichiers de contrle journalisation

Fichiers de journalisation archivs

Riadh HADJ MTIR 2011/2012

31

Gestion dune instance Oracle (2bis)


traiter une instruction SQL
4 5

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

Riadh HADJ MTIR 2011/2012

Gestion dune instance Oracle (2bis)

Le processus serveur modifie les donnes de la table dans la mmoire SGA.

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

Riadh HADJ MTIR 2011/2012

33

Structure physique dune BD (1)

Fichiers de contrle

Fichiers de donnes

Fichiers de journalisation en ligne

Fichier de paramtres

Fichiers de sauvegarde

Fichiers de journalisation archivs

Fichier de mots de passe

Fichiers d'alertes et fichiers trace


34

Riadh HADJ MTIR 2011/2012

Structure physique dune BD (2)


Les fichiers constituant une base de donnes Oracle sont organiss de la faon suivante :
Fichiers de contrle : contiennent des donnes sur la base elle-mme (informations sur la structure physique de la base de donnes). Ces fichiers sont d'une importance capitale pour la base. Sans eux, vous ne pouvez pas ouvrir de fichiers de donnes pour accder aux donnes de la base.

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.

Riadh HADJ MTIR 2011/2012

35

Structure physique dune BD (3)


Les fichiers supplmentaires ci-dessous permettent la base de donnes de s'excuter correctement :
Fichier de paramtres : permet de dfinir comment l'instance est configure lors de son lancement. Fichier de mots de passe : permet aux utilisateurs de se connecter distance la base de donnes et d'effectuer des tches d'administration.

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.

Riadh HADJ MTIR 2011/2012

36

Structure physique dune BD (4)

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

Structures logiques et physiques dune BD (1)

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 et physiques dune BD (2)

Structures logiques
Base de donnes

Structures physiques

Schma

Tablespace

Fichier de donnes

Segment

Extent

Bloc de donnes Oracle

Bloc du systme d'exploitation

Riadh HADJ MTIR 2011/2012

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.

Riadh HADJ MTIR 2011/2012

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.

Riadh HADJ MTIR 2011/2012

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.

Riadh HADJ MTIR 2011/2012

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...

Riadh HADJ MTIR 2011/2012

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

: Rcapitulatif des composants structurels

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

Gestion dune instance

Une instance Oracle = Ensemble des zones mmoires + Processus allous une base de donnes

Riadh HADJ MTIR 2011/2012

47

Gestion dune instance (2)

Une instance de base de donnes Oracle peut tre dans 4 statuts :


Arrte Etat NoMount Etat Mount (monte) Ouverte

Riadh HADJ MTIR 2011/2012

48

Gestion dune instance (3)


Dmarrage dune base de donnes Oracle
sqlplus / as sysdba SQL> startup

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;

Riadh HADJ MTIR 2011/2012

49

Gestion dune instance (4) Arrt dune base de donnes Oracle : 4 types darrt
Normal Transactionnel Immediate Abort

sqlplus / as sysdba SQL> shutdown (transactionnal/immediate/Abort)

Riadh HADJ MTIR 2011/2012

50

Gestion dune instance (5)

Modes darrt

Riadh HADJ MTIR 2011/2012

51

Chapitre 2 Gestion des utilisateurs dans une BD Oracle


Les privilges systme Les privilges objet
Riadh HADJ MTIR 2011/2012

52

Quest ce quun privilge?

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

Les privilges Systme

Riadh HADJ MTIR 2011/2012

54

Les privilges DBA

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

56

Privilges systme accords un utilisateur

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

Riadh HADJ MTIR 2011/2012

57

Privilges systme accords un utilisateur (2)

Riadh HADJ MTIR 2011/2012

58

Accorder un privilge

Pour accorder un privilge il faut suivre les tapes suivantes :


1) Crer un nouvel utilisateur 2) Donner le privilge CREATE SESSION lutilisateur

3) Donner au nouvel utilisateur le privilge CREATE TABLE


Riadh HADJ MTIR 2011/2012

59

Accorder un privilge (2)

Riadh HADJ MTIR 2011/2012

60

Crer et accorder un privilge un rle

Un rle est un ensemble de privilges Lorsque le rle est cr, le DBA utilise la requte GRANT pour assigner ce rle aux utilisateurs

Riadh HADJ MTIR 2011/2012

61

Modification du mot de passe

Riadh HADJ MTIR 2011/2012

62

Les privilges Objet

Riadh HADJ MTIR 2011/2012

63

Les privilges Objet

Riadh HADJ MTIR 2011/2012

64

Accorder les privilges Objet

Riadh HADJ MTIR 2011/2012

65

Les mots cls WITH GRANT OPTION et PUBLIC

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

Riadh HADJ MTIR 2011/2012

66

Retirer les privilges

Riadh HADJ MTIR 2011/2012

67

Chapitre 3 Le Langage SQL

Riadh HADJ MTIR 2011/2012

68

Partie I : Les ordre de SQL

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

70

Prsentation (suite)

Le langage SQL comporte:


LDD : Langage de Dfinition de Donnes (dfinir les tables, les vues, ..) LMD : Langage de Manipulation de Donnes (MAJ, Requtes, ..)

Riadh HADJ MTIR 2011/2012

71

Les ordres de SQL

Riadh HADJ MTIR 2011/2012

72

Les types de donnes SQL

Types de donnes
NUMBER CHAR Chiffre

Description
Chane de caractres

VARCHAR2
DATE

Chane de caractres de longueur variable


La valeur de date et dheure entre 1er Janvier 4712 avant JC et 31 Dcembre 9999

Riadh HADJ MTIR 2011/2012

73

Cration dune table


CREATE TABLE nom_de_table(
attribut_1 type_1 [PRIMARY KEY], attribut_n type_n
//contrainte cl primaire

[CONSTRAINT nom_const PRIMARY KEY(liste_attributs)],


//contrainte cl trangre

[CONSTRAINT nom_const FOREIGN KEY(liste_attributs) REFERENCES nom_table(liste_attributs)],


//contrainte dintgrit

[CONSTRAINT nom_const CHECK(condition)]

);
Riadh HADJ MTIR 2011/2012

74

Exemple de Bases de donnes

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#)

Riadh HADJ MTIR 2011/2012

75

Cration dune table : exemple

CREATE TABLE participant( numeroP number(5), nomP char(30), prenomP char(30), addressP char(50) );

Riadh HADJ MTIR 2011/2012

76

Les contraintes : exemple

CREATE TABLE participant( numeroP number(5) PRIMARY KEY, nomP char(30) NOT NULL, prenomP char(30), addressP char(50) );

Riadh HADJ MTIR 2011/2012

77

Les contraintes : exemple (suite)


CREATE TABLE inscrit( numeroP number(5), nomC char(30), droitinscription number(5), constraint pri_key Primary Key (numeroP, nomC), constraint for_key1 Foreign Key (numeroP) references participant(numeroP), constraint for_key2 Foreign Key (nomC) references colloque(nomC) );

Riadh HADJ MTIR 2011/2012

78

Modification de tables

ALTER TABLE nom_table ADD|MODIFY(attribut TYPE,);

Exemple:
ALTER TABLE participant MODIFY(numeroP number(3));

Riadh HADJ MTIR 2011/2012

79

Suppression de contraintes

ALTER TABLE nom_table DROP CONSTRAINT nom_const;

Riadh HADJ MTIR 2011/2012

80

La requte SELECT

SELECT liste_d_attributs FROM liste_de_tables WHERE conditions;


SELECT indique la liste des attributs constituant le rsultat FROM le (les) tables utiles la requte WHERE indique les conditions que doivent satisfaire les tuples de la base pour faire partie du rsultat
Riadh HADJ MTIR 2011/2012

81

La requte SELECT (2)

Exemple 1 : Select * from participant;


* remplace tous les tuples Cette requte retourne tous les tuples de la table participant

Riadh HADJ MTIR 2011/2012

82

La requte SELECT (3)

Exemple 2 : Select numeroP, nomP from participant where prenomP = 'Salah';


Cette requte retourne le numro et le nom de tous les participants ayant pour prnom 'Salah'

Riadh HADJ MTIR 2011/2012

83

Les doublons

Contrairement l'algbre relationnelle, SQL ne supprime pas les doublons


Exemple :
Select prenomP from participant
prenomP
Ali Salah Salma Ins Ali Mohamed Salah Anis Ali

Riadh HADJ MTIR 2011/2012

84

Les doublons (suite)

Pour viter d'avoir des tuples identiques en utilise le mot cl DISTINCT


Exemple :
Select DISTINCT(prenomP) from participant;
PrenomP
Salah Salma Ins Mohamed Anis Ali

Riadh HADJ MTIR 2011/2012

85

Trier les rsultats

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

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

87

La clause WHERE (suite) Exemples:


select NomP from Inscrit where droitinscription BETWEEN 100 and 1000;

select NomP from Participant Where prenomP IN ('Ali','Amine','Hend');

Riadh HADJ MTIR 2011/2012

88

Les chanes de caractres

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

Riadh HADJ MTIR 2011/2012

89

Les chanes de caractres (2) Exemples :


Select * from colloque where nomC LIKE '%a'; Tous les colloques dont le nom finit par 'a' Select * from colloque where nomC LIKE '__a%'; Tous les colloques dont la quatrime lettre est 'a'

Riadh HADJ MTIR 2011/2012

90

Les dates

Dans SQL une date s'crit au format DD-MON-YY'


Exemple :
Select nomC from colloque where dateC BETWEEN 03-NOV-05 AND 03-NOV-06

Riadh HADJ MTIR 2011/2012

91

Les valeurs nulles

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

Les oprations binaires

Les connecteurs logiques deviennent


x AND y = min(x,y) x OR y = max (x,y) NOT x = 1 - x

Riadh HADJ MTIR 2011/2012

93

Les requtes sur plusieurs tables

Les requtes SQL dcrites dans cette section permettent de manipuler simultanment plusieurs tables et d'exprimer des oprateurs d'algbre relationnelle:
jointure, union, intersection, ...

Riadh HADJ MTIR 2011/2012

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';

Riadh HADJ MTIR 2011/2012

96

Jointures (3)

On peut faire intervenir plus que deux tables Exemple:


Select NomP, PrenomP, DateC from Inscrit I, Participant P, colloque C where I.NumeroP = P.NumeroP and I.NomC = C.NomC;

Riadh HADJ MTIR 2011/2012

97

Jointure sur la mme table

Exemple: Donner des couples de colloques organiss par la mme universit


Select C1.NomC, C2.NomC from colloque C1, colloque C2 Where C1.Universite = C2.Universite

Riadh HADJ MTIR 2011/2012

98

Requtes imbriques

Le rsultat dune requte sert comme condition dans la deuxime requte Ces types de requtes peuvent porter sur plusieurs tables

Riadh HADJ MTIR 2011/2012

99

Requtes imbriques (2)

Conditions portant sur des relations Exemple:


Select numeroP from inscrit where nomC In ( select nomC from Colloque where Universite = Monastir);
On peut utiliser = la place de IN si on est sr que la sous requte ramne un et un seul tuple

Riadh HADJ MTIR 2011/2012

100

Requtes imbriques (3)

Sous requtes corrles Exemple:


Donner tous les participants ayant organis au moins une fois et fait une prsentation dans un colloque Select numeroP from organisateur O where Exists (select * from conferencier C where O.numeroP = C.numeroP);
Riadh HADJ MTIR 2011/2012

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;

Riadh HADJ MTIR 2011/2012

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;

Riadh HADJ MTIR 2011/2012

104

La clause HAVING

On peut ajouter une condition sur le groupe Exemple:


Select universite, count (NomC) From colloque Group by universite Having count (NomC) >= 3;

Riadh HADJ MTIR 2011/2012

105

Mise jour dune table : Insertion

Insert into R(a1,a2, .., aN ) values (v1,v2, .., vN );


Exemple :
Insert into Colloque (nomC, universiteC, adresseC, dateC) values (JJC,Manouba, Campus Manouba, 2007-03-30);

Insert into Inscrit (numeroP, nomC, droitinscription) values (153,JJC, 300);


Riadh HADJ MTIR 2011/2012

106

Mise jour dune table : Destruction

Delete from R Where condition;


Exemple :

Delete from Participant where NumeroP = 1210; Delete from colloque where NomC = JAE;

Il faut respecter les contraintes dintgrit rfrentielle !!


Riadh HADJ MTIR 2011/2012

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;

Riadh HADJ MTIR 2011/2012

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;

Riadh HADJ MTIR 2011/2012

109

Partie II : SQL avanc


Les requtes simples Les sous-requtes Les fonctions de groupes Le regroupement Les fonctions individuelles La conversion des donnes Les fonctions gnrales Les expressions conditionnelles Les oprateurs de comparaison Les vues Les squences Les index Les synonymes
Riadh HADJ MTIR 2011/2012

110

Les requtes simples

Riadh HADJ MTIR 2011/2012

111

Syntaxe gnrale dune recherche


SELECT <liste des attributs projets>
FROM <liste des relations touches par la question> [WHERE <liste des critres de restriction>]

[GROUP BY <liste des attributs d'agrgation>]


[HAVING <liste des critres de restriction dagrgats>] [ORDER BY <liste des attributs de tri du rsultat>];
Riadh HADJ MTIR 2011/2012

112

Ordre et choix des colonnes (SELECT)

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

Ordre des lignes (ORDER BY)

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

SELECT customer_name, city 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 city ---------------Albany Battle Creek Boulder Carlisle Carteret Clearwater Gainsville Kaneohe Ogden Plano Prospect Park Sacramento Santa Clara Seattle Seminole
114

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

Riadh HADJ MTIR 2011/2012

115

Expressions numriques : Multiplication

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

Expression textuelle : Concatnation

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

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

119

Les sous-requtes simples


Dans ce cas la sous-requte est d'abord value puis le rsultat est utilis pour excuter la requte principale Exemple
slectionner la liste des employs ayant mme poste que JONES select FIRST_NAME from EMPLOYEES where JOB_ID = ( select JOB_ID from EMPLOYEES where upper(FIRST_NAME) = 'JONES' );

Remarque
Les sous-requtes sont plus lisibles que des jointures

Riadh HADJ MTIR 2011/2012

120

Les sous-requtes synchronises


Dans ce cas la sous-requte est value pour chaque nuplet de la requte principale Exemple
slectionner des employs ne travaillant pas dans le mme dpartement que leur manager
select FIRST_NAME from EMPLOYEES e where DEP_ID != ( select DEP_ID from EMPLOYEES where e.MANAGER_ID = EMPLOYEE_ID);

Remarque
le synonyme e de la requte principale est utilis dans la sous-requte

Riadh HADJ MTIR 2011/2012

121

Les oprateurs associs aux sous-requtes (1)

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 ?

Riadh HADJ MTIR 2011/2012

122

Les oprateurs associs aux sous-requtes (2)

Les oprateurs ensemblistes


Dans les exemples prcdents, le SELECT de la sous-requte ramenait un seul n-uplet, car droite du signe "=" se trouvait une seule valeur Cependant une sous-requte peut ramener plusieurs nuplets (une liste de valeur) Les oprateurs permettant de comparer une valeur un ensemble de valeurs sont les oprateurs obtenus en ajoutant ANY et ALL la suite d'un oprateur de comparaison
ANY : la comparaison sera vraie si elle est vraie pour au moins un lment de l'ensemble ALL : la comparaison sera vraie si elle est vraie pour tous les lments de l'ensemble
Riadh HADJ MTIR 2011/2012

123

Les oprateurs associs aux sous-requtes (3)

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"

Riadh HADJ MTIR 2011/2012

124

Les oprateurs associs aux sous-requtes (4)

Les sous-requtes ramenant plusieurs colonnes


II est possible de comparer le rsultat d'un SELECT ramenant plusieurs colonnes une liste de colonnes La liste de colonnes figurera entre parenthses gauche de l'oprateur de comparaison Syntaxe
select col1, ... from nom table where (col2,col3,) = (select col2, col3, ---)

Exercice
slectionner la liste des employs ayant mme job et mme salaire que FORD
Riadh HADJ MTIR 2011/2012

125

Les fonctions de groupes

Riadh HADJ MTIR 2011/2012

126

Les fonctions de groupes (1)


II est possible d'utiliser certaines fonctions en demandant de grouper les rsultats selon une ou plusieurs colonnes Les fonctions de groupe sont :
avg (col)
moyenne des valeurs (les valeurs NULL sont ignores)

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

Riadh HADJ MTIR 2011/2012

127

Les fonctions de groupes (2)


SELECT product_id, product_name, product_description FROM T_Product ;
Product_ID ----------1 2 3 4 5 6 7 8 Product_Name --------------------End Table Coffee Table Computer Desk Entertainment Center Writer's Desk 8-Drawer Desk Dining Table Computer Desk Product_Description -------------------

Computer Desk 48

Computer Desk 64

SELECT COUNT(*) FROM T_Product ;


COUNT(*) -------8
Riadh HADJ MTIR 2011/2012

SELECT COUNT(product_description) FROM T_Product ;


COUNT(product_description) -------------------------2
128

Les fonctions de groupes (3)


SELECT MIN(unit_price), MAX(unit_price) FROM T_Product ;
MIN(unit_price) MAX(unit_price) --------------- -----------175,00 800,00

SELECT MAX(order_date) FROM T_Order;

MAX(order_date) -------------05/11/1998

Riadh HADJ MTIR 2011/2012

129

Les fonctions de groupes (4)

SELECT SUM(on_hand*unit_price) FROM T_Product;


11 150.00

SELECT AVG(unit_price) FROM T_Product;


440.63

Riadh HADJ MTIR 2011/2012

130

Regroupement

Riadh HADJ MTIR 2011/2012

131

Calcul sur plusieurs groupes

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

Regroupement: Ordre des critres

SELECT NO_CLIENT, NO_VENDEUR, SUM(MONTANT) FROM COMMANDE


GROUP BY NO_CLIENT, NO_VENDEUR ; GROUP BY NO_VENDEUR, NO_CLIENT ;

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

Riadh HADJ MTIR 2011/2012

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

SELECT NO_CLIENT, SUM(MONTANT) FROM COMMANDE GROUP BY NO_CLIENT;


Riadh HADJ MTIR 2011/2012

134

Regroupement: DISTINCT

Le mot-cl distinct permet de supprimer les lignes identiques du rsultat


SELECT NO_CLIENT FROM COMMANDE ; SELECT DISTINCT NO_CLIENT FROM COMMANDE ; NO_CLIENT --------1233 4333 4436 5026

NO_CLIENT --------1233 4333 4436 1233 1233 4333 1233 5026 4333 5026

SELECT COUNT( NO_CLIENT) FROM COMMANDE ; COUNT(NO_CLIENT) ---------------10

SELECT COUNT(DISTINCT NO_CLIENT) FROM COMMANDE ;

COUNT(DISTINCTNO_CLIENT) -----------------------4
135

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

137

Fonctions de manipulation de casse


Fonctions INITCAP (colonne | chane) Dfinitions Convertit la premire lettre de chaque mot dune chane de caractres en majuscule et les autres lettres en minuscule Convertit une chane de caractres en minuscule Convertit une chane de caractres en majuscule Exemples Initcap(Cours de SQL') Rsultats Cours De Sql

LOWER (colonne | chane)

lower(Cours de SQL') upper(Cours de SQL')

cours de sql COURS DE SQL

UPPER (colonne | chane)

Riadh HADJ MTIR 2011/2012

138

Fonctions de manipulation de caractres


Fonctions length (chane) instr(chane, sous-chane) substr(chane, i, j) Dfinitions Nombre de caractres dans la chane Emplacement dune sous-chane spcifie dans une chane Extrait une sous-chane du ime caractre jusquau jme caractre Exemples length(Bonjour') instr(Bonjour', j') substr(Bonjour', 1,3) lpad(sal,10, *) Remplit chane pour avoir une chane de longueur x en ajoutant le text (un espace par dfaut) rpad(chane, x [,text]) concat(chane1, chane2) Trim([leading|trailing|both ] [caractre] FROM chane) Concatner des chanes Supprime la plus grande chane contenant seulement les caractres (un espace par dfaut) partir du dbut, de la fin ou des deux extrmits de la chane Si chane a une taille suprieure x alors elle est tronque rpad(sal,10, *') concat(Bon,jour) trim(S FROM SSSMITH) trim(both 'x' from 'xTomxx') 5000****** Bonjour MITH 7 4 Bon Rsultats

lpad(chane, x [,text])

******5000

Tom

Riadh HADJ MTIR 2011/2012

139

Fonctions de manipulation des dates (1)

SYSDATE affiche la date systme

Riadh HADJ MTIR 2011/2012

140

Fonctions de manipulation des dates (2)

Riadh HADJ MTIR 2011/2012

141

Fonctions de manipulation des dates (3)

Riadh HADJ MTIR 2011/2012

142

Conversion de donnes

Riadh HADJ MTIR 2011/2012

143

Conversion

Riadh HADJ MTIR 2011/2012

144

Conversion

Riadh HADJ MTIR 2011/2012

145

Les fonctions gnrales

Riadh HADJ MTIR 2011/2012

146

La fonction NVL

Syntaxe : NVL(expr1,expr2) Fonction : Substituer les valeurs nulles dune colonne par une valeur choisie Exemple

Riadh HADJ MTIR 2011/2012

147

La fonction NVL2

Syntaxe : NVL2(expr1,expr2,expr3) Fonction : Afficher expr2 si expr1 est non nulle, sinon afficher expr3 Exemple

Riadh HADJ MTIR 2011/2012

148

La fonction NULLIF

Syntaxe : NULLIF(expr1,expr2) Fonction : Afficher NULL si expr1=expr2, sinon afficher expr1 Exemple

Riadh HADJ MTIR 2011/2012

149

Les expressions conditionnelles

Riadh HADJ MTIR 2011/2012

150

Lexpression CASE

Riadh HADJ MTIR 2011/2012

151

Lexpression DECODE

Riadh HADJ MTIR 2011/2012

152

Les oprateurs de comparaison

Riadh HADJ MTIR 2011/2012

153

Oprateurs de comparaison

=, <, >, <=, >=, <>, BETWEEN IS NULL LIKE

Riadh HADJ MTIR 2011/2012

154

Oprateurs de comparaison (=) SELECT * FROM T_Customer WHERE customer_name = 'IMPRESSIONS';


SELECT * FROM T_Customer WHERE customer_id = 2;

Riadh HADJ MTIR 2011/2012

155

Oprateurs de comparaison (>, <)

SELECT * FROM COMMANDE WHERE MONTANT < 500;


SELECT * FROM T_Customer WHERE customer_name < 'M';

Riadh HADJ MTIR 2011/2012

156

Oprateurs de comparaison (>=, <=)

SELECT * FROM COMMANDE WHERE MONTANT >= 500;


SELECT * FROM T_Customer WHERE customer_name <= 'M';

Riadh HADJ MTIR 2011/2012

157

Oprateurs de comparaison (<>)

SELECT * FROM COMMANDE WHERE NO_VENDEUR <> 9;


SELECT * FROM T_Customer WHERE customer_name <> 'IMPRESSIONS';

Riadh HADJ MTIR 2011/2012

158

Oprateurs de comparaison (BETWEEN)

BETWEEN : Intervalle ferm Exemple:


SELECT * FROM COMMANDE WHERE MONTANT BETWEEN 100 AND 200;
MONTANT appartient l'intervalle [100, 200]

Riadh HADJ MTIR 2011/2012

159

Oprateurs de comparaison (NOT BETWEEN)

NOT BETWEEN : Intervalle ouvert Exemple:


SELECT * FROM COMMANDE WHERE MONTANT NOT BETWEEN 100 AND 200;
MONTANT appartient l'intervalle ]-, 100[ ]200, +[

Riadh HADJ MTIR 2011/2012

160

Oprateurs de comparaison (IS NULL)

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;

Riadh HADJ MTIR 2011/2012

161

Oprateurs de comparaison (LIKE)

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

Le caractre _ remplace n'importe quel caractre


Il remplace 1 seul caractre
SELECT product_id, product_name FROM T_Product WHERE product_name LIKE '%Desk%'
product_id product_name ---------- ------------3 Computer Desk 5 Writer's Desk 6 8-Drawer Desk 8 Computer Desk
162

Riadh HADJ MTIR 2011/2012

Les vues

Riadh HADJ MTIR 2011/2012

163

Les vues Definitions


Une vue est une table virtuelle elle n'existe pas dans la base elle est construite partir du rsultat d'un SELECT. La vue sera vu par l'utilisateur comme une table relle.

Les vues permettent


des accs simplifis aux donnes l'indpendance des donnes la confidentialit des donnes : restreint les droits d'accs certaines colonnes ou certains n-uplets.
Riadh HADJ MTIR 2011/2012

164

Les vues (2)


Cration d'une vue : CREATE VIEW La commande CREATE VIEW permet de crer une vue en spcifiant le SELECT constituant la dfinition de la vue Syntaxe create view nom [(col1, ...) ] as select col1, col2, ... from tab where prdicat [with check option]
La spcification des noms de colonnes de la vue est facultative Par dfaut, les colonnes de la vue ont pour nom les noms des colonnes rsultat de SELECT

Riadh HADJ MTIR 2011/2012

165

Les vues (3)


Cration de vues partir de plusieurs tables Exemple
crer une vue comportant le nom des employs, le nom du service et le lieu de travail. create view EMPLOYES2 as select ENAME, DNAME, LOC from EMP emp, DEPT dept where emp.DEPTNO = dept.DEPTNO

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

Riadh HADJ MTIR 2011/2012

166

Les vues (4)

Suppression d'une vue


Une vue peut tre dtruite par la commande drop view nom-vue

Renommer une vue


Une vue peut tre renomme par la commande rename ancien-nom-vue to nouveau-nom-vue

Riadh HADJ MTIR 2011/2012

167

Les squences

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

169

Squence : cration

Riadh HADJ MTIR 2011/2012

170

Squence (3)
Exemple

Riadh HADJ MTIR 2011/2012

171

Squence : modification

Riadh HADJ MTIR 2011/2012

172

Squence : suppression

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

174

Index (2)

Riadh HADJ MTIR 2011/2012

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

Quand ne pas crer des index


La table est petite Les colonnes ne sont pas souvent utilises Les requtes recherchent plus de 2-4% des lignes La table est mise jour frquemment Les colonnes indexes sont rfrences comme une partie de lexpression
176

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

177

Synonyme (2)

Riadh HADJ MTIR 2011/2012

178

Synonyme (3)

Riadh HADJ MTIR 2011/2012

179

Chapitre 4 PL/SQL et les Triggers

Riadh HADJ MTIR 2011/2012

180

Partie I Le langage PL/SQL Exploitation des requtes SQL

Riadh HADJ MTIR 2011/2012

181

Le langage PL/SQL

Riadh HADJ MTIR 2011/2012

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

Moteur PL/SQL dans Oracle

Riadh HADJ MTIR 2011/2012

184

Bloc PL/SQL

Riadh HADJ MTIR 2011/2012

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;

Riadh HADJ MTIR 2011/2012

186

Les Structures itratives


for i in [reverse] deb .. fin loop instr end loop;

while condition loop instr end loop;


loop instr exit when condition; instr end loop;
Riadh HADJ MTIR 2011/2012

187

Exemple : IF-THEN-ELSE
Dfinir une fonction factorielle :

appel

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

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

La syntaxe des variables

identificateur [CONSTANT] TypeDeDonnes [NOT NULL] [(:= | DEFAULT) expression];


Exemples
num NUMBER(4) ; num2 NUMBER NOT NULL := 3.5 ; en_stock BOOLEAN := false ; limite CONSTANT REAL := 5000.00 ;

Riadh HADJ MTIR 2011/2012

191

La syntaxe des variables (suite)

La contrainte NOT NULL doit tre suivie d'une clause d'initialisation


Les dclarations multiples ne sont pas permises. Donc, on ne peut pas crire : v1 , v2 NUMBER ;

Riadh HADJ MTIR 2011/2012

192

Exemple de programme PL/SQL

Riadh HADJ MTIR 2011/2012

193

Dclaration dun type compos

Un type compos est


un type "record" : lorsque tous les attributs sont d'un type SQL
une variable de type record peut reprsenter une ligne d'une table relationnelle

un type collection : TABLE, VARRAY utiliss en relationnel objet un type objet : modle relationnel objet

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

195

Le type RECORD : Exemple

Riadh HADJ MTIR 2011/2012

196

Lattribut %TYPE Exemple:

Riadh HADJ MTIR 2011/2012

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

Exploitation des requtes SQL

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

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

Les Curseurs (3)

Deux types de curseur :


Curseurs implicites : dclars pour toutes les instructions LMD et les SELECT en PL/SQL Curseurs Explicites : dclars et nomms au sein du code source (par le dveloppeur)

Riadh HADJ MTIR 2011/2012

205

Les Curseurs explicites

Riadh HADJ MTIR 2011/2012

206

Les Curseurs explicites (2)


Instructions :
OPEN : initialise le curseur FETCH : extrait la ligne courante et passe la suivante (pas d'exception si plus de ligne) CLOSE : invalide le curseur Si on veut parcourir toutes les lignes : boucle FOR

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

Les Curseurs explicites : Exemple 1


declare cursor c_proj is select proj_name, proj_budget from project order by proj_budget ; proj_rec c_proj%rowtype ; begin open c_proj ; loop -- parcours des lignes du curseur fetch c_proj into proj_rec ; exit when c_proj%notfound ; ... on utilise la ligne courante range dans proj_rec ... end loop ; close c_proj ; end ;
Riadh HADJ MTIR 2011/2012

208

Les Curseurs explicites : Exemple 2


declare cursor c_proj is select proj_name, proj_budget from project order by proj_budget ; begin

for proj_rec in c_proj loop -- parcours des lignes du curseur


... on utilise la ligne courante range dans proj_rec ...

end loop ; end ;


Riadh HADJ MTIR 2011/2012

209

Les Curseurs implicites Quelque fois, PL/SQL dclare implicitement un curseur :


pour les instructions du DML qui modifient la base (INSERT, DELETE, UPDATE) pour les requtes de la forme SELECT INTO.

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

Riadh HADJ MTIR 2011/2012

210

Les Curseurs implicites : Exemple

delete from Employee where ... if SQL%rowcount > 10 then -- on a supprim plus de 10 lignes ... end if ;

Riadh HADJ MTIR 2011/2012

211

Partie II Les exceptions Les modules stocks

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

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.

INVALID_CURSOR : ouverture de curseur non valide.


CURSOR_ALREADY_OPEN : ouverture d'un curseur dj ouvert.

VALUE_ERROR : erreur arithmtique (conversion, taille, ...) pour un NUMBER.


ZERO_DIVIDE : division par 0 ; STORAGE_ERROR : dpassement de capacit mmoire. LOGIN_DENIED : connexion refuse
Riadh HADJ MTIR 2011/2012

217

Dclaration des exceptions

On dclare l'exception nomException grce l'instruction suivante :


nomException EXCEPTION ;

Riadh HADJ MTIR 2011/2012

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)

Riadh HADJ MTIR 2011/2012

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 ;

Riadh HADJ MTIR 2011/2012

220

Exemple de programme PL/SQL


create procedure detruitCompagnie(ma_comp VARCHAR2(20)) is restePilote EXCEPTION ; PRAGMA Exception_init(restePilote, -2292); compagnieInexistante EXCEPTION ; -- ce n'est pas ncessaire de la lier un code d'erreur begin delete from compagnie where comp = ma_comp ; if SQL%NOTFOUND then raise compagnieInexistante ; end if ; exception when restePilote then ... traitement de l'erreur ... when compagnieInexistante then ... when others then ... on traite les autres erreurs end ;
Riadh HADJ MTIR 2011/2012

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)

Riadh HADJ MTIR 2011/2012

222

Les modules stocks

Riadh HADJ MTIR 2011/2012

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 ;

Riadh HADJ MTIR 2011/2012

225

Les paramtres Pour dclarer un paramtre, la syntaxe est :


nom_param [mode] datatype [ := valeur_defaut ]

Il y a trois modes de passage de paramtre :


mode IN : paramtre en entre (par dfaut) mode OUT : paramtre en sortie mode IN OUT : paramtre en entre et sortie

Riadh HADJ MTIR 2011/2012

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;

Riadh HADJ MTIR 2011/2012

227

Exemple 2
create or replace procedure nom_dept2 ( numero IN dept.dept_no%type, nom OUT dept.dept_name%type) is
begin

select dept_name into nom from dept where dept_no = numero ;


end ;
Riadh HADJ MTIR 2011/2012

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

Les packages : Spcification

La spcification contient :
des signatures de procdures et fonctions des constantes et des variables des dfinitions d'exceptions

des dfinitions de curseurs

Riadh HADJ MTIR 2011/2012

230

Les packages : Corps

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

Les packages : Exemple


-- spcification create or replace package mon_paq as procedure p ; procedure p(i NUMBER) ; function p(i NUMBER) return NUMBER ; cpt NUMBER ; function get_cpt return NUMBER ; mon_exception EXCEPTION ; PRAGMA EXCEPTION_INIT(mon_exception, -20101); end ; /
Package cr.
Riadh HADJ MTIR 2011/2012

232

Les packages : Exemple (suite)


-- corps create or replace package body mon_paq as procedure p is begin dbms_output.put_line('toto'); end ; procedure p(i NUMBER) is begin dbms_output.put_line(i); end ; function p(i NUMBER) return NUMBER is begin if (i > 10) then raise mon_exception ; end if ; return i ; end ; function get_cpt return NUMBER is begin return cpt ; end ; end ; /
Riadh HADJ MTIR 2011/2012

233

Partie III Les Triggers

Riadh HADJ MTIR 2011/2012

234

Dfinition

Un trigger (dclencheur) est un programme qui se dclenche automatiquement suite un vnement


Il fait partie du schma (comme les modules stocks) mais que l'on n'appelle pas explicitement, la diffrence d'une procdure stocke

Riadh HADJ MTIR 2011/2012

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

Entte du trigger On dfinit :


la table laquelle le trigger est li, les instructions du DML qui dclenchent le trigger le moment o le trigger va se dclencher par rapport l'instruction DML (avant ou aprs) si le trigger se dclenche
une seule fois pour toute l'instruction (i.e. trigger instruction), une fois pour chaque ligne modifie/insre/supprime. (i.e. trigger ligne, avec l'option FOR EACH ROW)

et ventuellement une condition supplmentaire de dclenchement (clause WHEN)

Riadh HADJ MTIR 2011/2012

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

Riadh HADJ MTIR 2011/2012

238

Trigger ligne ou instruction ?

Un trigger instruction se dclenche une fois, suite une instruction DML


Un trigger ligne (FOR EACH ROW) se dclenche pour chaque ligne modifie par l'instruction DML

Riadh HADJ MTIR 2011/2012

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

On peut dfinir une condition pour un trigger ligne

le trigger se dclenchera pour chaque ligne vrifiant la condition

Riadh HADJ MTIR 2011/2012

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

Ordre dexcution des triggers

Les triggers se dclenchent dans l'ordre suivant :


1. 2. 3. 4. Triggers instruction BEFORE Triggers ligne BEFORE (dclenchs n fois) Triggers ligne AFTER (dclenchs n fois) Triggers instruction AFTER

Riadh HADJ MTIR 2011/2012

243

Vous aimerez peut-être aussi