SlideShare une entreprise Scribd logo
1  sur  124
Télécharger pour lire hors ligne
SGBD et L4G
II2
KHCHERIF Raoudha
Raoudha.khcherif@topnet.tn
Bureau : 109
École Nationale des Sciences Informatiques
KHCHERIFRaoudha SGBD et L4G 2
Plan du cours
I. Architecture d‟un SGBD
II. Le Langage de définition de Données
III. Le Langage de manipulation de données
IV. Le Langage PL/SQL
KHCHERIFRaoudha SGBD et L4G 3
I. Architecture d’un SGBD
Définitions:
BD: Collections de données cohérentes
et structurées
Système de Gestion de Bases de
Données
(SGBD) : Logiciel(s) assurant
structuration,
stockage, maintenance, mise à jour et
consultation des données d’une BD
KHCHERIFRaoudha SGBD et L4G 4
I.1 Objectifs des SGBD
• Indépendance physique : un remaniement
de l’organisation physique des données
n’entraîne pas de modification dans les
programmes d’application (traitements)
• Indépendance logique : un remaniement de
l’organisation logique des fichiers (ex.
nouvelle rubrique) n’entraîne pas de
modification dans les programmes
d’application non concernés
KHCHERIFRaoudha SGBD et L4G 5
I.1 Objectifs des SGBD
• Manipulation facile des données : un
utilisateur non-informaticien doit pouvoir
manipuler simplement les données
(interrogation et mise à jour)
• Administration facile des données : un
SGBD doit fournir des outils pour décrire les
données, permettre le suivi de ces
structures et autoriser leur évolution (tâche
de l’administrateur BD)
KHCHERIFRaoudha SGBD et L4G 6
I.1 Objectifs des SGBD
• Efficacité des accès aux données : garantie d‟un
bon débit (nombre de transactions exécutées par
seconde) et d‟un bon temps de réponse (temps
d‟attente moyen pour une transaction)
• Redondance contrôlée des données : diminution
du volume de stockage, pas de mise à jour
multiple ni d‟incohérence
KHCHERIFRaoudha SGBD et L4G 7
I.1 Objectifs des SGBD
• Cohérence des données : ex. L‟âge d‟une
personne doit être un nombre entier positif. Le
SGBD doit veiller à ce que les applications
respectent cette règle (contrainte d’intégrité).
• Partage des données : utilisation simultanée les
données par différentes applications
• Sécurité des données : les données doivent être
protégées contre les accès non-autorisés ou en cas
de panne
KHCHERIFRaoudha SGBD et L4G 8
I.2 Fonctions des SGBD
• Description des données : (LDD)
• Recherche des données
• Mise à jour des données
• Transformation des données
• Contrôle de l‟intégrité des données (respect des
contraintes d‟intégrité)
• Gestion de transactions (atomicité des transactions)
et sécurité (mots de passe, etc.)
}LMD
KHCHERIFRaoudha SGBD et L4G 9
I.3 Architecture fonctionnelle type d’un SGBD
• Architecture Ansi/Sparc:
– Niveau externe: C‟est le niveau d‟expression des
besoins des utilisateurs. Il formalise les préoccupations
de chaque utilisateur et sera en final confronté au
schéma conceptuel global.
– Niveau conceptuel: Décrit la structure de la base de
données globalement à tous les utilisateurs (limite la
redondance) . Ce schéma décrit la structure de la base
indépendamment de son implantation
KHCHERIFRaoudha SGBD et L4G 10
I.3 Architecture fonctionnelle type d’un SGBD
– Niveau interne : c‟est le niveau d‟implantation
informatique de la solution conceptuelle:
• Niveau interne logique: intègre une technologie
particulière, comme par exemple la technologie des
bases de données relationnelles.
• Niveau interne physique: c‟est le niveau
d‟implantation physique où l‟on tient compte d‟un
environnement logiciel et matériel donné.
KHCHERIFRaoudha SGBD et L4G 11
Architecture Ansi/Sparc
KHCHERIFRaoudha SGBD et L4G 12
Exemple: institut de formation
permanente
• Schéma logique
– Etudiant: nétudiant, nom, prénom, date_naissance
– Enseignant: nom, prénom, statut, compte_bancaire
– Cours: nomC, cycle, nom_enseignant
– Inscription: nétudiant, nom_cours, note1, note2
KHCHERIFRaoudha SGBD et L4G 13
Exemple (suite)
• Schémas externes.
• Schéma externe du professeur de base de données:
– Etudiant_BD: nom, prénom, note1, note2, note_finale tel
que Etudiant_BD résulte de la combinaison de Etudiant et
Inscription du SL, tels qu'il existe une Inscription de cet
étudiant pour le cours BD (nétudiant dans Etudiant =
nétudiant dans Inscription et nom_cours dans Inscription
= BD), et tel que note_finale = (note1 + note2)/2
KHCHERIFRaoudha SGBD et L4G 14
Exemple (suite)
• Schéma externe du service de gestion du personnel
enseignant :
– Professeur: nom, prénom, ncompte_bancaire,
nombre_de_cours, liste(nom_cours) tel que Professeur
résulte de la combinaison de Enseignant et Cours du SL,
tels que liste(nom_cours) est la liste de nomC qui se
trouvent dans Cours tel que nom_enseignant dans Cours =
nom dans Enseignant, et tel que nombre_de_cours =
Cardinalité (liste(nom_cours))
KHCHERIFRaoudha SGBD et L4G 15
Exemple (suite)
• Schéma interne (SI)
– Etudiant: fichier FEtud, contenu: nom, prénom, date de
naissance, nétudiant indexé sur nétudiant, index
secondaire sur nom+prénom
– Enseignant + cours: fichier FEnsCours, contenu: nom,
prénom, statut, ncompte_bancaire, liste(nomC, cycle)
tel que nom_enseignant dans Cours = nom dans
Enseignant indexé sur nom, deux index secondaires,
l'un sur nomC, l'autre sur cycle
– Inscription: fichier FInscrits, contenu: nétudiant,
nom_cours, note1, note2 indexé sur nétudiant, index
secondaire sur nom_cours
KHCHERIFRaoudha SGBD et L4G 16
KHCHERIFRaoudha SGBD et L4G 16
KHCHERIFRaoudha SGBD et L4G 17
Stockage
• Stockage des données dans les supports
physiques
• gestion des structures de mémorisation
(fichiers)
• gestion des structures d ‟accès (gestion des
index, des clés,…)
KHCHERIFRaoudha SGBD et L4G 18
Contrôle
• Optimisation globale des requêtes
• Gestion des conflits d ‟accès simultanés par
plusieurs utilisateurs
• Contrôle général de la cohérence de l ‟ensemble
• Coordination et suivi des processus en cours
• Garantie du bon déroulement des actions
entreprises
KHCHERIFRaoudha SGBD et L4G 19
Dialogue
• Analyse des demandes de l ‟utilisateur
• Contrôle des droits d ‟accès de l ‟utilisateur
• Présentation des résultats.
KHCHERIFRaoudha SGBD et L4G 20
II. Le langage de Définition des Données
(LDD SQL)
• SQL = Structured Query Language, issu de
SEQUEL (Structured English as a Query
Language)
• SQL permet la définition, la manipulation et le
contrôle d’une base de données relationnelle.
Il se base sur l’algèbre relationnelle.
• SQL est un standard ANSI depuis 1986.
• Nous adoptons dans ce chapitre la syntaxe
de SQL*Plus (Oracle).
KHCHERIFRaoudha SGBD et L4G 21
II.2 Créations de Table:
CREATE TABLE
• Forme simple
• Transmise à l ‟interprète du LDD
– vérification
– création de la table
• schémastockédans dictionnairededonnées
• allocation des structuresphysiques
CREATE TABLE Client
(noClient INTEGER,
nomClient VARCHAR(15),
noTéléphone VARCHAR(15)
)
KHCHERIFRaoudha SGBD et L4G 22
La commande DESCRIBE
• la commande DESCRIBE permet de retrouver le
format d‟une table
SQL> describe s_dept;
Name Null? Type
------------------------------- -------- ----
ID NOT NULL NUMBER(7)
NAME NOT NULL VARCHAR2(25)
REGION_ID NUMBER(7)
KHCHERIFRaoudha SGBD et L4G 23
Types de données SQL
• CHAR(n):
• chaîne de caractères de longueur fixe n
• longueur par défaut 1
• longueur minimum 1,longueur maximum 255
• constantes:
• „DUPONT‟
• „Dupont,Marc‟
• „Titre“Coucou”‟
• „1234‟
• „NULL‟
KHCHERIFRaoudha SGBD et L4G 24
Type de données: VARCHAR2(n)
• chaîne de caractères de longueur variable et
de taille maximum n
– Longueur maximale : 32767 octets
• uniquement sur Oracle sinon CHAR
VARYING(n)
• constantes identiques a CHAR(n)
KHCHERIFRaoudha SGBD et L4G 25
Type de données: NUMBER(p)
• nombre entier positif, négatif ou nul de p
chiffres
• constantes:
– 0
– +0
– +1234
– -123123
– 1234
KHCHERIFRaoudha SGBD et L4G 26
Type de données:
NUMBER(p,s)
• nombre réel en virgule fixe de p chiffres au total
dont s après la virgule
• constantes de type NUMBER(4,1):
– 0,0
– 123,5
– -123,7
– -3,0
• d'après la configuration, il faut utiliser „.‟ ou „,‟
• certains SQL utilisent NUMERIC(p,s)
KHCHERIFRaoudha SGBD et L4G 27
Type de données: LONG
• chaîne de caractères de taille variable
jusqu'à 2 Gbytes
• limité à un seul attribut par table
KHCHERIFRaoudha SGBD et L4G 28
Type de données: DATE
• date (siècle, année, mois, jour, heure, minute, seconde)
• constantes
– „07-OCT-97‟
– „30-FEB-97‟ pas correct !
– „01-FEB-98‟ ou „01-FEV-98‟
– SYSDATE == date et heure actuelle
• l'arithmétiquefonctionne sur les dates:
– „10-OCT-99‟ - „09-OCT-99‟ == 1
– „07-OCT-96‟ + 10 == „17-OCT-96‟
– Par défaut DD-MON-YY (18-DEC-02)
– Fonction TO_DATE
Exemple :
start_date := to_date(‟29-SEP-2003‟,‟DD-MON-YYYY‟);
start_date := to_date(‟29-SEP-2003:13:01‟,‟DD-MON-YYYY:HH24:MI‟);
KHCHERIFRaoudha SGBD et L4G 29
La valeur NULL
• la valeur NULL est spéciale
– NULL appartient à tous les domaines: CHAR, LONG,
NUMBER, …
– signifie que la ligne n‟a pas de valeur pour cet attribut
• ne pas confondre avec
– „„
– 0
– 0.0
KHCHERIFRaoudha SGBD et L4G 30
Contrainte NOT NULL
• lors de la création d‟une table on peut spécifier
que certains attributs ne peuvent prendre la valeur
NULL
CREATE TABLE s_dept
(id NUMBER(7) NOT NULL,
name VARCHAR2(25) ,
region_id NUMBER(7) ) ;
KHCHERIFRaoudha SGBD et L4G 31
Définition des clés primaires et
étrangères
• Clé primaire :
CONSTRAINT nom_contrainte PRIMARY KEY
(attribut_clé [, attribut_clé2, …])
• Clé étrangère :
CONSTRAINT nom_contrainte FOREIGN KEY
(attribut_clé_ét) REFERENCES table(attribut)
KHCHERIFRaoudha SGBD et L4G 32
Définition des clés (exemple)
CREATE TABLE Client ( NumCli NUMBER(3),
Nom CHAR(30),
DateNaiss DATE,
Salaire NUMBER(8,2),
NumEmp NUMBER(3),
CONSTRAINT cle_pri PRIMARY KEY (NumCli),
CONSTRAINT cle_etr FOREIGN KEY (NumEmp)
REFERENCES EMPLOYEUR(NumEmp));
KHCHERIFRaoudha SGBD et L4G 33
Définition des contraintes
d’intégrités
• Contrainte de domaine :
CONSTRAINT nom_cont CHECK (condition)
• Exemple:
CREATE TABLE Client ( NumCli NUMBER(3),
Nom CHAR(30),
DateNaiss DATE,
Salaire NUMBER(8,2),
NumEmp NUMBER(3),
CONSTRAINT cle_pri PRIMARY KEY (NumCli),
CONSTRAINT cle_etr FOREIGN KEY (NumEmp) REFERENCES
EMPLOYEUR(NumEmp),
CONSTRAINT date_ok CHECK (DateNaiss
<SYSDATE));
KHCHERIFRaoudha SGBD et L4G 34
Définitions des index
• Création d’index (accélération des accès)
CREATE [UNIQUE] INDEX nom_index ON
nom_table (attribut [ASC|DESC], …);
• UNIQUE pas de double
• ASC/DESC ordre croissant ou décroissant
CREATE UNIQUE INDEX Icli ON Client (NumCli);
• Destructions : DROP TABLE nom_table;
DROP INDEX nom_index;
KHCHERIFRaoudha SGBD et L4G 35
Modification du schéma d’une
table
• Ajout d’attributs
ALTER TABLE nom_table ADD (attribut TYPE, …);
ex. ALTER TABLE Client ADD (tel NUMBER(8));
• Modifications d’attributs
ALTER TABLE nom_table MODIFY (attribut TYPE,
…);
ex. ALTER TABLE Client MODIFY (tel
NUMBER(10));
• Suppression de contraintes
ALTER TABLE nom_table DROP CONSTRAINT
nom_contrainte;
KHCHERIFRaoudha SGBD et L4G 36
III. Le Langage de Manipulation
de données (LMD SQL)
III.1 Syntaxe générale d’une requête:
SELECT [ALL|DISTINCT] attribut(s) FROM table(s)
[WHERE condition] [GROUP BY attribut(s)
[HAVING condition]]
[ORDER BY attribut(s) [ASC|DESC]];
• Tous les tuples d’une table
ex. SELECT * FROM Client;
• Tri du résultat
ex. Par ordre alphabétique inverse de nom
SELECT * FROM Client ORDER BY Nom DESC;
KHCHERIFRaoudha SGBD et L4G 37
BD exemple
• client ( numcli , nom, prenom, adresse, codepost,
ville, tel);
• produit ( numprod, designation, prixunit, qtestock );
• commande ( numcom, numcli, idvendeur, datec,
quantite, numprod);
• vendeur ( idvendeur, nomvendeur, qualité, salaire,
commission));
KHCHERIFRaoudha SGBD et L4G 38
Interrogation des données
• Calculs ex. Calcul de prix TTC
SELECT PrixUni+PrixUni*0.206 FROM Produit;
• Projection
ex. Noms et Prénoms des clients, uniquement
SELECT Nom, Prenom FROM Client;
• Restriction
ex. Clients qui habitent à Tunis
SELECT * FROM Client WHERE Ville = ‘Tunis’;
KHCHERIFRaoudha SGBD et L4G 39
Interrogation des données
• ex. Commandes en quantité au moins égale à 3
SELECT * FROM Commande WHERE Quantite >=
3;
• ex. Produits dont le prix est compris entre 50 et
100 DT
SELECT * FROM Produit
WHERE PrixUni BETWEEN 50 AND 100;
• ex. Commandes en quantité indéterminée
SELECT * FROM Commande WHERE Quantite IS
NULL;
KHCHERIFRaoudha SGBD et L4G 40
Interrogation des données
• ex. Clients habitant une ville dont le
nom se
termine par Menzel
SELECT * FROM Client
WHERE Ville LIKE ‘%Menzel’;
• ‘Menzel%’  commence par Menzel
• ‘%Men%’  contient le mot Men
– le joker„_‟ peut être remplacépar n‟importequel caractère
– le joker„%‟ peut être remplacépar 0, 1, 2, … caractères
KHCHERIFRaoudha SGBD et L4G 41
Interrogation des données
• ex. Prénoms des clients dont le nom est
Mohamed,
Ahmed ou Mahmoud
SELECT Prenom FROM Client
WHERE Nom IN (‘Ahmed’, ‘Mahmoud’, ‘Mohamed’);
• spécifie une liste de constantes dont une doit égaler le premier terme pour
que la condition soit vraie
• pour des NUMBER, CHAR, VARCHAR, DATE
• NB : Possibilité d’utiliser la négation pour tous ces
prédicats : NOT BETWEEN, NOT NULL, NOT LIKE,
NOT IN.
KHCHERIFRaoudha SGBD et L4G 42
Fonctions d’agrégat
• Elles opèrent sur un ensemble de valeurs,
fournissent une valeur unique
– AVG() : moyenne des valeurs
– SUM() : somme des valeurs
– MIN(), MAX() : valeur minimum, valeur maximum
– COUNT() : nombre de valeurs
• ex. Moyenne des prix des produits
SELECT AVG(PrixUni) FROM Produit;
KHCHERIFRaoudha SGBD et L4G 43
Opérateur DISTINCT
• ex. Nombre total de commandes
SELECT COUNT(*) FROM Commande;
SELECT COUNT(NumCli) FROM Commande;
• ex. Nombre de clients ayant passé commande
SELECT COUNT( DISTINCT NumCli)
FROM Commande;
KHCHERIFRaoudha SGBD et L4G 44
Exemple
• Table COMMANDE (simplifiée)
NumCli Date Quantite
1 22/09/99 1
3 22/09/99 5
3 22/09/99 2
 COUNT(NumCli) Résultat = 3
 COUNT(DISTINCT NumCli)  Résultat = 2
KHCHERIFRaoudha SGBD et L4G 45
Jointure
• Consiste en un produit cartésien ou certaines lignes seulement
sont sélectionnées via la clause WHERE
• ex. Liste des commandes avec le nom des clients
SELECT Nom, Date, Quantite FROM Client, Commande
WHERE Client.NumCli = Commande.NumCli;
• ex. Idem avec le numéro de client en plus
SELECT C1.NumCli, Nom, Date, Quantite
FROM Client C1, Commande C2 WHERE C1.NumCli =
C2.NumCli ORDER BY Nom;
• NB : Utilisation d’alias (C1 et C2) pour alléger
l’écriture + tri par nom.
KHCHERIFRaoudha SGBD et L4G 46
Jointure exprimée avec le
prédicat IN
• ex. Nom des clients qui ont commandé le 23/09
SELECT Nom FROM Client WHERE NumCli
IN (SELECT NumCli FROM Commande
WHERE Date = „23-09-2000‟ );
NB : Il est possible d‟imbriquer des requêtes.
KHCHERIFRaoudha SGBD et L4G 47
Prédicats EXISTS / NOT
EXISTS
• ex. Clients qui ont passé au moins une
commande [n ’ont passé aucune
commande]
SELECT * FROM Client C1
WHERE [NOT] EXISTS ( SELECT * FROM
Commande C2 WHERE C1.NumCli =
C2.NumCli );
KHCHERIFRaoudha SGBD et L4G 48
Prédicats ALL / ANY
• ex. Numéros des clients qui ont commandé
au moins un produit en quantité supérieure à
chacune [à au moins une] des quantités
commandées par le client n° 1.
SELECT DISTINCT NumCli FROM Commande
WHERE Quantite > ALL [ANY] (
SELECT Quantite FROM Commande
WHERE NumCli = 1 );
KHCHERIFRaoudha SGBD et L4G 49
Groupement
• permet de créer des groupes de lignes pour appliquer
des fonctions d‟agrégat sur les groupes
– il est possible de créer des groupes sur plusieurs attributs
• ex. Quantité totale commandée par chaque
client
SELECT NumCli, SUM(Quantite) FROM Commande
GROUP BY NumCli;
• ex. Nombre de produits différents
commandés...
SELECT NumCli, COUNT(DISTINCT NumProd)
FROM Commande GROUP BY NumCli;
KHCHERIFRaoudha SGBD et L4G 50
Groupement
• ex. Quantité moyenne commandée pour les
produits faisant l’objet de plus de 3
commandes
SELECT NumProd, AVG(Quantite)
FROM Commande GROUP BY NumProd
HAVING COUNT(*)>3;
Attention : La clause HAVING ne s’utilise
qu’avec
GROUP BY.
KHCHERIFRaoudha SGBD et L4G 51
Opérations ensemblistes
• INTERSECT, MINUS, UNION
– les deux tableaux opérandesdoiventavoirunedescriptionidentique:
• nombre de colonnes
• domaines des valeurs de colonnes
– structuregénérale
• co-requête OPERATEUR co-requête
• ou chaque co-requête est une instruction SELECT
ex. Numéro des produits qui soit ont un prix inférieur à 100
DT, soit ont été commandés par le client n° 2
SELECT NumProd FROM Produit WHERE PrixUni<100
UNION SELECT NumProd FROM Commande WHERE
NumCLi=2;
KHCHERIFRaoudha SGBD et L4G 52
• mécanisme très puissant mais d‟un emploi
subtil !
• = une requête SELECT insérée dans la
clause WHERE d‟une autre requête
SELECT
• bien sur, une sous-requête peut contenir une
sous-sous-requête !
Les sous-requêtes
KHCHERIFRaoudha SGBD et L4G 53
• peuvent retourner
– une seule valeur
– une liste de valeurs
• une sous-requête constitue le second
membre d‟une comparaison dans la clause
WHERE
Les sous-requêtes
KHCHERIFRaoudha SGBD et L4G 54
SELECT last_name, salary FROM s_emp
WHERE salary >= (SELECT AVG(salary) FROM
s_emp);
LAST_NAME SALARY
------------------------- ------------------
Velasquez 2500
Ngao 1450
Nagayama 1400
Quick-To-See 1450
...
sous-requête
Les sous-requêtes retournant
une valeur
KHCHERIFRaoudha SGBD et L4G 55
SELECT last_name, salary FROM s_emp
WHERE salary >= ALL (SELECT salary FROM
s_emp WHERE dept_id = 10) ;
LAST_NAME SALARY
------------------------- -------------------
Velasquez 2500
Ngao 1450
Quick-To-See 1450
Ropeburn 1550
Giljum 1490
Les sous-requêtes retournant
une liste de valeurs
KHCHERIFRaoudha SGBD et L4G 56
• clause ORDER BY y est interdite
• chaque sous-requête doit être entourée de
parenthèses
• clause SELECT d‟une sous-requête ne peut
contenir qu‟un seul attribut
• les attributs définis dans la requête principale
peuvent être utilises dans la sous-requête
• les attributs définis dans la sous-requête ne
peuvent pas être utilises dans la requête principale
Contraintes des sous-requêtes
KHCHERIFRaoudha SGBD et L4G 57
• dans le cas de sous-requêtes retournant une seule
valeur, les opérateurs classiques (<, >, …) peuvent
être appliques
• dans le cas de sous-requêtes retournant une liste de
valeurs, il faut utiliser les quantificateurs
– ANY: l‟expression est vraie si une des valeurs de la
sous-requête vérifie la comparaison
– ALL: l‟expression est vraie si toutes les valeurs de la
sous-requête vérifient la comparaison
• Note: IN équivaut à = ANY
Opérateurs de comparaison et les
sous-requêtes
KHCHERIFRaoudha SGBD et L4G 58
• la clause WHERE d‟une requête principale
peut contenir plusieurs sous-requêtes reliées
par les connecteurs AND et OR
Les sous-requêtes multiples
KHCHERIFRaoudha SGBD et L4G 59
Mise à jour des données
• Ajout d’un tuple
INSERT INTO nom_table VALUES (val_att1,
val_att2, …);
ex. INSERT INTO Produit VALUES (400, ‘Nouveau
produit’, 78.90);
• Mise à jour d’un attribut
UPDATE nom_table SET attribut=valeur
[WHERE condition];
ex. UPDATE Client SET Nom=‘Dudule’ WHERE
NumCli = 3;
KHCHERIFRaoudha SGBD et L4G 60
Mise à jour des données
• Suppression de tuples
DELETE FROM nom_table [WHERE condition];
ex. DELETE FROM Produit;
ex. DELETE FROM Client WHERE Ville =
‘Tunis’;
KHCHERIFRaoudha SGBD et L4G 61
Les vues
• Vue : table virtuelle calculée à partir d‟autres
tables grâce à une requête
• Définition d’une vue
CREATE VIEW nom_vue AS requête;
ex. CREATE VIEW Noms AS SELECT Nom,
Prenom FROM Client;
KHCHERIFRaoudha SGBD et L4G 62
Les vues
• Intérêt des vues
– Simplification de l’accès aux données en
masquant les opérations de jointure
ex. CREATE VIEW Prod_com AS SELECT
P.NumProd, Dési, PrixUni, Date, Quantite
FROM Produit P, Commande C WHERE
P.NumProd=C.NumProd;
SELECT NumProd, Dési FROM Prod_com
WHERE Quantite>10;
KHCHERIFRaoudha SGBD et L4G 63
Les vues
• Intérêt des vues
– Sauvegarde indirecte de requêtes complexes
– Présentation de mêmes données sous différentes
formes adaptées aux différents usagers
particuliers
– Support de l’indépendance logique
ex. Si la table Produit est remaniée, la vue
Prod_com doit être refaite, mais les requêtes
qui
utilisent cette vue n’ont pas à être remaniées.
KHCHERIFRaoudha SGBD et L4G 64
Les vues
• Intérêt des vues
– Renforcement de la sécurité des données
par masquage des lignes et des colonnes
sensibles aux usagers non habilités
• Problèmes de mise à jour,
restrictions
– La mise à jour de données via une vue
pose des problèmes et la plupart des
systèmes impose d’importantes
restrictions.
KHCHERIFRaoudha SGBD et L4G 65
Les vues
• Problèmes de mise à jour,
restrictions
– Le mot clé DISTINCT doit être absent.
– La clause FROM doit faire référence à une
seule table.
– La clause SELECT doit faire référence
directement aux attributs de la table
concernée (pas d’attribut dérivé).
– Les clauses GROUP BY et HAVING sont
interdites.
KHCHERIFRaoudha SGBD et L4G 66
IV.Le Langage PL/SQL
IV.1.Généralités
PL/SQL :
 Langage procédural
Extension de SQL
Déclaration de variables et de constantes
Définition de sous-programmes
Gestion des erreurs à l‟exécution (exceptions)
Manipulation de données avec SQL
KHCHERIFRaoudha SGBD et L4G 67
STRUCTURE D‟UN PROGRAMME PL/SQL
Déclaration de variables, types, curseurs, exceptions,.. (Optionnel)
Corps du programme : Code SQL (Obligatoire)
Gestion des erreurs (Optionnel)
BLOC PL/SQL :
DECLARE (Déclaration de variables et curseurs)
…..
BEGIN
…..
….
EXCEPTION (Traitement des cas d‟erreur signalés par le SGBD)
…..
END ;
II – LE LANGAGE PL/SQL
KHCHERIFRaoudha SGBD et L4G 68
PORTEE DES OBJETS
Un bloc qui déclare un objet peut y accéder ainsi que tous les sous blocs
(sous bloc : bloc imbriqué dans un autre).
Par contre tout objet déclaré dans un sous bloc n‟est pas accessible au
niveau du bloc supérieur.
UTILISATION EN CLIENT SERVEUR
Requêtes SQL exécutées séquentiellement :
Envoi d‟un message du client vers le serveur pour chaque
requête et retour du serveur vers le client
Bloc PL/SQL :
Envoi d‟un message pour tout le bloc et un seul retour vers le
client
KHCHERIFRaoudha SGBD et L4G 69
IV.2 Bloc PL/SQL
DECLARE
--Déclaration constantes/variables
BEGIN
--Commandes/instructions
EXCEPTION
--Traitement des erreurs à
l’exécution.
END;
KHCHERIFRaoudha SGBD et L4G 70
DECLARATION DES VARIABLES
Identificateur [CONSTANT] typededonnées [NOT NULL] [ :=| DEFAULT
expression] ;
Types de données :
Caractères (CHAR, VARCHAR, VARCHAR2, LONG, CLOB,..)
Numériques (NUMBER)
Date/heure (DATE, INTERVAL,….)
Données binaires (BLOB, RAW, …)
Adresse d‟enregistrements (ROWID)
Variable du type d‟une colonne (%TYPE)
Nom_variable Nom_table.Nom_colonne%TYPE
Variable du type enregistrement d‟un table (%ROWTYPE)
Nom_variable Nom_table %ROWTYPE
Variable de type RECORD :
TYPE Nom_variable IS RECORD (……..) ;
KHCHERIFRaoudha SGBD et L4G 71
IV.3 Déclaration
• Partie déclarative d‟un bloc PL/SQL ou d‟un sous-
programme
• Types usuels : INTEGER, REAL, STRING, DATE,
BOOLEAN + types SQL
• Variables
– ex.
Date_naissance DATE;
compteur INTEGER:=0; -- Valeur par défaut
compteur INTEGER DEFAULT 0; -- idem
 id CHAR(5) NOT NULL:=„AP001‟;
KHCHERIFRaoudha SGBD et L4G 72
IV.3. Déclarations
• Constantes
– ex. euro CONSTANT REAL:=6.55957;
• Type d’une autre variable
– ex. credit REAL;
– debit credit%TYPE;
• Type d’un tuple d’une table
– ex. un_client client%ROWTYPE;
• Tableaux : 1) Déclaration d‟un type tableau
2) Déclaration d‟une variable de ce type
KHCHERIFRaoudha SGBD et L4G 73
IV.3. Déclarations
• Tableaux
– ex. TYPE Tab_entiers TABLE OF INTEGER
INDEX BY BINARY_INTEGER;
– TYPE Tab_cli TABLE OF client.nom%TYPE
INDEX BY BINARY_INTEGER;
• un_entier Tab_entiers;
• un_client Tab_cli;
KHCHERIFRaoudha SGBD et L4G 74
IV.3. Déclarations
• Enregistrements personnalisés
1) Définition d’un type enregistrement
– ex. TYPE Enr_four IS RECORD (numero
fournisseur.numfour%TYPE, raison_sociale
CHAR(20));
2) Définition d’une variable de ce type
– ex. un_fournisseur Enr_four;
KHCHERIFRaoudha SGBD et L4G 75
V.4. Instructions de base
• Affectation
– ex. numero:=0;
– numero:=numero+1;
– SELECT numcli INTO numero FROM client
WHERE numcli=numero+1;
• Utilisation des tableaux
– ex. i:=1;
– un_entier(i):=i*2;
– NB : i doit être de type BINARY_INTEGER.
KHCHERIFRaoudha SGBD et L4G 76
V.4. Instructions de base
• Utilisation des enregistrements
personnalisés
– ex. un_fournisseur.numero:=4589;
– un_fournisseur.raison_sociale:=„COGIP‟;
– SELECT numfour, raisonsoc INTO
un_fournisseur FROM fournisseur WHERE
numfour=4589;
KHCHERIFRaoudha SGBD et L4G 77
V.5. Structures de contrôle
• Instruction sélective
– IF-THEN, IF-THEN-ELSE ou IF-THEN-
ELSIF
IF condition1 THEN
-- Instructions
ELSEIF condition2 THEN
-- Instructions
ELSE
-- Instructions
END IF;
KHCHERIFRaoudha SGBD et L4G 78
CASE variable
WHEN expr1 THEN instructions1;
WHEN expr2 THEN instructions2;
……
WHEN exprn THEN instructionsn;
[ELSE instructionsm;]
END CASE;
CASE variable
WHEN condition1 THEN instructions1;
WHEN condition2 THEN instructions2;
……
WHEN condition_n THEN instructionsn;
[ELSE instructionsm;]
END CASE;
Test conditionnel
KHCHERIFRaoudha SGBD et L4G 79
Test conditionnel
• CASE
– CASE sélecteur
WHEN expression1 THEN résultat1
WHEN expression2 THEN résultat2
ELSE résultat3
END;
KHCHERIFRaoudha SGBD et L4G 80
Test conditionnel
Exemple :
val := CASE city
WHEN „TORONTO‟ THEN „RAPTORS‟
WHEN „LOS ANGELES‟ THEN „LAKERS‟
ELSE „NO TEAM‟
END;
KHCHERIFRaoudha SGBD et L4G 81
V.5. Structures de contrôle
• Instructions itératives
FOR compteur IN [REVERSE] min..max LOOP
-- Instructions
END LOOP;
WHILE condition LOOP
-- Instructions
END LOOP;
LOOP
-- Instructions
END LOOP;
KHCHERIFRaoudha SGBD et L4G 82
V.5. Structures de contrôle
• Branchements
-- Saut inconditionnel
GOTO étiquette;
-- Sortie de boucle
EXIT WHEN condition;
NB : À utiliser avec énormément de modération !
KHCHERIFRaoudha SGBD et L4G 83
V.6. Curseurs
• Curseur : structure de données permettant
de stocker le résultat d‟une requêtes qui
retourne plusieurs tuples
• Déclaration : CURSOR nom_curs IS
requête;
– ex. CURSOR calcul IS SELECT numprod,
prixuni*1.206 prixttc FROM produit;
NB : Un tuple du curseur sera de type
calcul%ROWTYPE.
KHCHERIFRaoudha SGBD et L4G 84
V.6. Curseurs
• Ouverture d’un curseur : OPEN
nom_curs;
• Gestion automatique d’un curseur
ex. FOR tuple IN calcul LOOP
var1:=tuple.numprod;
var2:=tuple.prixttc;
END LOOP;
• Gestion « manuelle »
ex.LOOP
FETCH calcul INTO tuple;
EXIT WHEN calcul%NOTFOUND;
…
END LOOP
KHCHERIFRaoudha SGBD et L4G 85
V.6. Curseurs
• Attributs des curseurs
– "%NOTFOUND : FALSE si FETCH retourne un
résultat
– "%FOUND : opposé logique de %NOTFOUND
– "%ROWCOUNT : Nombre de lignes lues
– "%ISOPEN : TRUE si le curseur est ouvert
• Fermeture d’un curseur : CLOSE nom_curs;
KHCHERIFRaoudha SGBD et L4G 86
KHCHERIFRaoudha SGBD et L4G 87
Exemple
KHCHERIFRaoudha SGBD et L4G 88
Ligne courante d’un curseur
• La ligne courante d‟un curseur est déplacée à
chaque appel de l‟instruction fetch
• On est parfois amené à modifier la ligne courante
pendant le parcours du curseur
• Pour cela on peut utiliser la clause « where current
of » pour désigner cette ligne courante dans un
ordre LMD (insert, update, delete)
• Il est nécessaire d‟avoir déclaré le curseur avec la
clause FOR UPDATE OF pour que le bloc
compile
KHCHERIFRaoudha SGBD et L4G 89
Exemple
• DECLARE
CURSORc IS
select matr, nome, sal from emp
wheredept = 10
FOR UPDATE OF emp.sal;
………………………………………..
if salaireis not null then
total := total + salaire;
else -- on met 0 à la place de null pour le salaire
updateemp set sal = 0 where current of c;
• end if;
KHCHERIFRaoudha SGBD et L4G 90
KHCHERIFRaoudha SGBD et L4G 91
Select … for update
• Select classique : non verrouillé
• Problème avec les curseurs
• Solution : Select … for update
– Résultat : verrouiller toutes les lignes jusqu‟au
prochain commit
KHCHERIFRaoudha SGBD et L4G 92
V.7. Exceptions
• À chaque erreur à l‟exécution, une
exception est levée. Ces exceptions sont
gérées par des routines séparées.
• Fonctions PL/SQL pour la gestion
d’erreurs
– "SQLCODE : Code de la dernière exception
levée
– "SQLERRM : Message d‟erreur associé
KHCHERIFRaoudha SGBD et L4G 93
V.7. Exceptions
• Exceptions personnalisées
– Déclaration : nom_exc EXCEPTION;
– Lever l’exception : IF condition THEN RAISE
nom_exc; END IF;
• Traitement des exceptions
– WHEN nom_exc THEN -- Instruction
– ex. WHEN probleme THEN
RAISE_APPLICATION_ERROR(-20501,‟Erreur !‟);
KHCHERIFRaoudha SGBD et L4G 94
Les exceptions et erreurs
• NO_DATA_FOUND
– Quand Select into ne retourne aucune ligne
• TOO_MANY_ROWS
– Quand Select into retourne plusieurs lignes
• OTHERS
– Toutes erreurs non interceptées
• RAISE_APPLICATION_ERROR
– Pour retourner une message d‟erreur
– Numéro d‟erreur entre -20000 et -20999
• LOGIN_DENIED Connexion incorrecte
• NOT_LOGGED_ON Pas de connexion
• ROWTYPE_MISMATCH Erreur de type
• STORAGE_ERROR Dépassement de capacité mémoire
• ZERO_DIVIDE Division par zéro
KHCHERIFRaoudha SGBD et L4G 95
V.8. Exemple de programme
PL/SQL
-- Calcul du prix TTC des produits
-- et recopie dans la table PRODTTC
DECLARE
nbp NUMBER(3);
aucun_produit EXCEPTION;
CURSOR calcul IS SELECT numprod, prixuni*1.206
prixttc FROM produit;
tuple calcul%ROWTYPE;
BEGIN
-- Comptage des produits
SELECT COUNT(*) INTO nbp FROM produit;
-- Test « il existe des produits » ou pas ?
IF nbp = 0 THEN RAISE aucun_produit;
END IF;
KHCHERIFRaoudha SGBD et L4G 96
V.8. Exemple de programme
PL/SQL
-- Recopie des valeurs dans la table prodttc
FOR tuple IN calcul LOOP
INSERT INTO prodttc VALUES (tuple.numprod, tuple.prixttc);
END LOOP;
-- Validation de la transaction
COMMIT;
EXCEPTION
WHEN aucun_produit THEN
RAISE_APPLICATION_ERROR(-20501, „Erreur : table client
vide‟);
END;
KHCHERIFRaoudha SGBD et L4G 97
Affichage
• Activer le retour écran
– set serveroutput on size 10000
• Affichage
– dbms_output.put_line(chaîne);
– Utilise || pour faire une concaténation
KHCHERIFRaoudha SGBD et L4G 98
Exemple n°1
DECLARE
i number(2);
BEGIN
FOR i IN 1..5 LOOP
dbms_output.put_line(„Nombre : ‟ || i );
END LOOP;
END;
KHCHERIFRaoudha SGBD et L4G 99
Exemple n°2
DECLARE
compteur number(3);
i number(3);
BEGIN
select count(*) into compteur from clients;
FOR i IN 1..compteur LOOP
dbms_output.put_line('Nombre : ' || i );
END LOOP;
END;
PL/SQL
Procédures et fonctions
KHCHERIFRaoudha SGBD et L4G 101
FONCTIONSETPROCEDURESSTOCKEES(CATALOGUEES)
Programmes PL/SQL compilés et stockés dans le dictionnaire de données
Les procédures stockées peuvent être appelées dans :
Un bloc PL/SQL
Une fonction ou une procédure
Dans un programme en langage évolué (C, Fortran, ..)
Sécurité : droit d’accès sur les procédures
GRANT EXECUTE ON Nom_procédure TO Nom_utilisateur ;
Intégrité : Utilisation de COMMIT-ROLLBACK lors de
traitements dépendants exécutés dans le même bloc ;
Performance : réduction du nombre d’appels à la base
Productivité : simplicité de maintenance
KHCHERIFRaoudha SGBD et L4G 102
CREATION DE PROCEDURES OU FONCTIONS :
CREATE [OR REPLACE] PROCEDURE Nom_procédure
[(paramètre1 IN | OUT | IN OUT type
[,paramètre2 IN | OUT | IN OUT type]
…..
[,paramètren IN | OUT | IN OUT type])]
IS
Déclaration de variables locales ;
BEGIN
Corps_de_la_procédure
END;
CREATE [OR REPLACE] FUNCTION Nom_fonction
[(paramètre1 IN | OUT | IN OUT type
[,paramètre2 IN | OUT | IN OUT type]
…..
[,paramètren IN | OUT | IN OUT type])]
RETURN typeSQL
IS
Déclaration de variables locales ;
BEGIN
Corps_de_la_procédure
END;
KHCHERIFRaoudha SGBD et L4G 103
APPELD’UNE PROCEDURE OU D’UNE FONCTION :
EXECUTE Nom_Procédure(……) ;
EXECUTE Nom_Fonction(……) ;
SELECT …., Nom_Fonction(….),…..
Variable := Nom_Fonction(…….) ;
KHCHERIFRaoudha SGBD et L4G 104
Les procédures
create or replace procedure list_nom_clients
IS
BEGIN
DECLARE
nom varchar2(30);
CURSOR get_nom_clients IS
select nom,adresse from clients;
BEGIN
FOR toto IN get_nom_clients LOOP
dbms_output.put_line('Employé : ' ||
UPPER(toto.nom) ||' Ville : '|| toto.adresse);
END LOOP;
END;
KHCHERIFRaoudha SGBD et L4G 105
Les procédures
create or replace procedure list_nom_clients
(ville IN varchar2,
result OUT number)
IS
BEGIN
DECLARE
CURSOR get_nb_clients IS
select count(*) from clients where adresse=ville;
BEGIN
open get_nb_clients;
fetch get_nb_clients INTO result;
end;
end;
KHCHERIFRaoudha SGBD et L4G 106
Récupération des résultats
• Déclarer une variable
SQL> variable nb number;
• Exécuter la fonction
SQL> execute list_nom_clients('paris',:nb)
• Visualisation du résultat
SQL> print
• Description des paramètres
SQL> desc nom_procedure
KHCHERIFRaoudha SGBD et L4G 107
Les fonctions
createor replace function nombre_clients
return number
IS
BEGIN
DECLARE
i number;
CURSORget_nb_clients IS
select count(*)from clients;
BEGIN
open get_nb_clients;
fetch get_nb_clientsINTO i;
return i;
end;
end;
• Exécution:select nombre_clients()fromdual
KHCHERIFRaoudha SGBD et L4G 108
Procédures et fonctions
• Suppression de procédures ou fonctions
– DROP PROCEDURE nom_procedure
– DROP FUNCTION nom_fonction
• Table système contenant les procédures et
fonctions : user_source
KHCHERIFRaoudha SGBD et L4G 109
Exercices
• Réalisez une procédure list_tables qui
donne le nom de toutes vos tables
• Réalisez une procédure UPDATENOM qui
remplit correctement la colonne
NOM_PIECE de clients par rapport à la
table fournisseurs
• Réalisez une procédure UPDATEPRIX qui
met à jour tous les prix de la table clients
KHCHERIFRaoudha SGBD et L4G 110
Procédure LIST_TABLES
create or replace procedure list_tables
IS
BEGIN
DECLARE
CURSOR get_nom IS
select table_name from user_tables;
BEGIN
FOR nom IN get_nom
LOOP
dbms_output.put_line('Nom de la table : ' ||
toto.table_name);
END LOOP;
END;
KHCHERIFRaoudha SGBD et L4G 111
Procédure UPDATENOM
CREATE OR REPLACE PROCEDURE updatenom
IS
BEGIN
DECLARE
nompiece varchar2(30);
cursor toto IS
SELECT distinct fournisseurs.reference, fournisseurs.nom_piece
FROM fournisseurs;
BEGIN
FOR nompiece IN toto LOOP
UPDATE clients
SET clients.nom_piece=nompiece.nom_piece
WHERE clients.reference=nompiece.reference;
END LOOP;
END;
END;
KHCHERIFRaoudha SGBD et L4G 112
Procédure UPDATEPRIX
CREATE OR REPLACE PROCEDURE updateprix
IS
BEGIN
DECLARE
prixunit number(5);
CURSOR toto IS
SELECT clients.nom, clients.adresse, fournisseurs.prix_piece_unite
FROM fournisseurs,clients
WHERE fournisseurs.reference=clients.reference;
BEGIN
FOR prixunit IN toto LOOP
UPDATE clients
SET clients.prix=clients.quantite*prixunit.prix_piece_unite
WHERE prixunit.nom=clients.nom and prixunit.adresse=clients.adresse;
END LOOP;
END;
END;
PL/SQL
Triggers
KHCHERIFRaoudha SGBD et L4G 114
V.9. Triggers
• Trigger (déclencheur) : routine déclenchée
automatiquement par des événements liés à des
actions sur la base
• Les triggers complètent les contraintes d‟intégrité
en permettant des contrôles et des traitements plus
complexes.
KHCHERIFRaoudha SGBD et L4G 115
V.9.Triggers
Types de
triggers
Insertion Suppression Mise à jour
Avant 1 2 3
Après 4 5 6
D‟une table de la base
KHCHERIFRaoudha SGBD et L4G 116
V.9.Triggers
• Création en SQL*Plus :
– CREATE [OR REPLACE] TRIGGER nom_trig
BEFORE|AFTER INSERT|DELETE|UPDATE ON
nom_table FOR EACH ROW
-- Bloc PL/SQL contenant le
-- traitement à effectuer
• Variables spécifiques
– :OLD.nom_attribut : valeur de l‟attribut avant mise à
jour
– :NEW.nom_attribut : valeur de l‟attribut après mise à
jour
KHCHERIFRaoudha SGBD et L4G 117
Accès aux valeurs modifiées
• Utilisation de new et old
• Si nous ajoutons un client dont le nom est
toto, alors nous récupérons ce nom grâce à
la variable :new.nom
• Dans le cas de suppression ou modification,
les anciennes valeurs sont dans la variable
:old.nom
KHCHERIFRaoudha SGBD et L4G 118
V.9. Triggers
-- Exemple : test de clé primaire sur la table client
CREATE ORREPLACE TRIGGER trig_clep BEFORE INSERT ON
client FOREACH ROW
DECLARE
n INTEGER;
cle_existeEXCEPTION;
cle_nulleEXCEPTION;
BEGIN
-- Existence de la clé primaire
SELECT COUNT(numcli)INTO n FROM client WHERE
numcli=:NEW.numcli;
IF n>0 THEN
RAISE cle_existe;
END IF
KHCHERIFRaoudha SGBD et L4G 119
V.9. Triggers
-- Valeurnulle
IF :NEW.numcli IS NULL THEN
RAISE cle_nulle;
END IF;
EXCEPTION
WHEN cle_existe THEN
RAISE_APPLICATION_ERROR(-20501,‘Clé primaire déjà utilisée
!’);
WHEN cle_nulle THEN RAISE_APPLICATION_ERROR(-
20502,‘La clé primaire doit avoir une valeur!’);
END;
KHCHERIFRaoudha SGBD et L4G 120
KHCHERIFRaoudha SGBD et L4G 121
Les Packages?
• Regroupement des types, éléments et sous
programmes PL/SQL logiquement liés.
• Se composent de deux parties
– Une spécification
– Un corps
• Permettent à Oracle de lire immédiatement
plusieurs objets en mémoire
KHCHERIFRaoudha SGBD et L4G 122
Package
Déclarationde la procédureA
Définition de la procédureA
Variable locale
Spécification
Corps de package
KHCHERIFRaoudha SGBD et L4G 123
• Spécification :
• CREATE [OR REPLACE] PACKAGENom_programmeAS
Variables;
PROCEDURE ….;
FUNCTION ….RETURN …;
…..
Exceptions;
END [Nom_programme] ;
• Implémentation :
• CREATE [OR REPLACE] PACKAGEBODY Nom_programme
» AS
PROCEDURE….
BEGIN
…..
END;
FUNCTION….RETURN …;
BEGIN
….
END ;
• END [Nom_programme] ;
KHCHERIFRaoudha SGBD et L4G 124
Exemple
• CREATEPACKAGEbankAS
PROCEDURE transac;
PROCEDURE detourne(valueNUMBER);
• END bank;
• CREATEPACKAGEBODY bankAS
--commentaires
PROCEDUREtransacIS
BEGIN
...
END transac;
-- commentaires
PROCEDUREdetourne(valueNUMBER)IS
BEGIN
...
END detourne;
END bank;
EXECUTE bank.detourne(1 000 000 000$);

Contenu connexe

Similaire à support_cours.pdf

cours base de données
cours base de donnéescours base de données
cours base de donnéesYassine Badri
 
Intro2019
Intro2019Intro2019
Intro2019kdkvfe
 
Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsMICHRAFY MUSTAFA
 
LP_Admin_base_données.ppt
LP_Admin_base_données.pptLP_Admin_base_données.ppt
LP_Admin_base_données.pptIdriss22
 
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?Benoit Fillon
 
Spark SQL principes et fonctions
Spark SQL principes et fonctionsSpark SQL principes et fonctions
Spark SQL principes et fonctionsMICHRAFY MUSTAFA
 
Resume theorique-m106-partie1-1401-620cd8a160396 (1)
Resume theorique-m106-partie1-1401-620cd8a160396 (1)Resume theorique-m106-partie1-1401-620cd8a160396 (1)
Resume theorique-m106-partie1-1401-620cd8a160396 (1)MounirAlaoui4
 
bases des données relationnelles pour les ue nfa008
bases des données relationnelles pour les ue nfa008bases des données relationnelles pour les ue nfa008
bases des données relationnelles pour les ue nfa008AliHusseini14
 
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésDigital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésNeo4j
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurMicrosoft Technet France
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQLBruno Bonnin
 
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentalsCERTyou Formation
 
Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Guillaume Nocent
 
[JSS2015] Query Store
[JSS2015] Query Store[JSS2015] Query Store
[JSS2015] Query StoreGUSS
 
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usages
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usagesPostgreSQL, plus qu'une base de données, une plateforme aux multiples usages
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usagesOpen Source Experience
 
Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQLAntoine Augusti
 

Similaire à support_cours.pdf (20)

cours base de données
cours base de donnéescours base de données
cours base de données
 
cm-bd.pdf
cm-bd.pdfcm-bd.pdf
cm-bd.pdf
 
Intro2019
Intro2019Intro2019
Intro2019
 
Spark RDD : Transformations & Actions
Spark RDD : Transformations & ActionsSpark RDD : Transformations & Actions
Spark RDD : Transformations & Actions
 
LP_Admin_base_données.ppt
LP_Admin_base_données.pptLP_Admin_base_données.ppt
LP_Admin_base_données.ppt
 
Sgbd oss-27012006
Sgbd oss-27012006Sgbd oss-27012006
Sgbd oss-27012006
 
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
 
Spark SQL principes et fonctions
Spark SQL principes et fonctionsSpark SQL principes et fonctions
Spark SQL principes et fonctions
 
Resume theorique-m106-partie1-1401-620cd8a160396 (1)
Resume theorique-m106-partie1-1401-620cd8a160396 (1)Resume theorique-m106-partie1-1401-620cd8a160396 (1)
Resume theorique-m106-partie1-1401-620cd8a160396 (1)
 
bases des données relationnelles pour les ue nfa008
bases des données relationnelles pour les ue nfa008bases des données relationnelles pour les ue nfa008
bases des données relationnelles pour les ue nfa008
 
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésDigital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
Corrige_partie_ADM.pdf
Corrige_partie_ADM.pdfCorrige_partie_ADM.pdf
Corrige_partie_ADM.pdf
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL Serveur
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQL
 
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
 
Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016
 
[JSS2015] Query Store
[JSS2015] Query Store[JSS2015] Query Store
[JSS2015] Query Store
 
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usages
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usagesPostgreSQL, plus qu'une base de données, une plateforme aux multiples usages
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usages
 
Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQL
 

Plus de MbarkiIsraa

correctionTD2JAVA.pdf
correctionTD2JAVA.pdfcorrectionTD2JAVA.pdf
correctionTD2JAVA.pdfMbarkiIsraa
 
correctionTD-1-vhdl2947.pptx
correctionTD-1-vhdl2947.pptxcorrectionTD-1-vhdl2947.pptx
correctionTD-1-vhdl2947.pptxMbarkiIsraa
 
Chapitre3_Partie1.pdf
Chapitre3_Partie1.pdfChapitre3_Partie1.pdf
Chapitre3_Partie1.pdfMbarkiIsraa
 
Chapitre2_Partie1.pdf
Chapitre2_Partie1.pdfChapitre2_Partie1.pdf
Chapitre2_Partie1.pdfMbarkiIsraa
 
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdfMbarkiIsraa
 
c h02EspaceProbTr.pdf
c h02EspaceProbTr.pdfc h02EspaceProbTr.pdf
c h02EspaceProbTr.pdfMbarkiIsraa
 
Ordonnanc-Proc_Threads (1).pdf
Ordonnanc-Proc_Threads (1).pdfOrdonnanc-Proc_Threads (1).pdf
Ordonnanc-Proc_Threads (1).pdfMbarkiIsraa
 
correctionTD-2-vhdl2949.pptx
correctionTD-2-vhdl2949.pptxcorrectionTD-2-vhdl2949.pptx
correctionTD-2-vhdl2949.pptxMbarkiIsraa
 
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfChapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfMbarkiIsraa
 
Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfMbarkiIsraa
 
Complexité_ENSI_2011.ppt
Complexité_ENSI_2011.pptComplexité_ENSI_2011.ppt
Complexité_ENSI_2011.pptMbarkiIsraa
 
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdfDiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdfMbarkiIsraa
 
Correction-TD1.pdf
Correction-TD1.pdfCorrection-TD1.pdf
Correction-TD1.pdfMbarkiIsraa
 
UML.Objet.4pp.pdf
UML.Objet.4pp.pdfUML.Objet.4pp.pdf
UML.Objet.4pp.pdfMbarkiIsraa
 

Plus de MbarkiIsraa (19)

NP-complet.ppt
NP-complet.pptNP-complet.ppt
NP-complet.ppt
 
Format.pptx
Format.pptxFormat.pptx
Format.pptx
 
correctionTD2JAVA.pdf
correctionTD2JAVA.pdfcorrectionTD2JAVA.pdf
correctionTD2JAVA.pdf
 
correctionTD-1-vhdl2947.pptx
correctionTD-1-vhdl2947.pptxcorrectionTD-1-vhdl2947.pptx
correctionTD-1-vhdl2947.pptx
 
PCD YasBas.pptx
PCD YasBas.pptxPCD YasBas.pptx
PCD YasBas.pptx
 
PLNE.pptx
PLNE.pptxPLNE.pptx
PLNE.pptx
 
Chapitre3_Partie1.pdf
Chapitre3_Partie1.pdfChapitre3_Partie1.pdf
Chapitre3_Partie1.pdf
 
Chapitre2_Partie1.pdf
Chapitre2_Partie1.pdfChapitre2_Partie1.pdf
Chapitre2_Partie1.pdf
 
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
 
c h02EspaceProbTr.pdf
c h02EspaceProbTr.pdfc h02EspaceProbTr.pdf
c h02EspaceProbTr.pdf
 
Ordonnanc-Proc_Threads (1).pdf
Ordonnanc-Proc_Threads (1).pdfOrdonnanc-Proc_Threads (1).pdf
Ordonnanc-Proc_Threads (1).pdf
 
prog_reg.pptx
prog_reg.pptxprog_reg.pptx
prog_reg.pptx
 
correctionTD-2-vhdl2949.pptx
correctionTD-2-vhdl2949.pptxcorrectionTD-2-vhdl2949.pptx
correctionTD-2-vhdl2949.pptx
 
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfChapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
 
Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdf
 
Complexité_ENSI_2011.ppt
Complexité_ENSI_2011.pptComplexité_ENSI_2011.ppt
Complexité_ENSI_2011.ppt
 
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdfDiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
 
Correction-TD1.pdf
Correction-TD1.pdfCorrection-TD1.pdf
Correction-TD1.pdf
 
UML.Objet.4pp.pdf
UML.Objet.4pp.pdfUML.Objet.4pp.pdf
UML.Objet.4pp.pdf
 

Dernier

JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfInstitut de l'Elevage - Idele
 
firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirstjob4
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfInstitut de l'Elevage - Idele
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...Institut de l'Elevage - Idele
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusInstitut de l'Elevage - Idele
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)Sana REFAI
 
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfWBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfSophie569778
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...Institut de l'Elevage - Idele
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...Institut de l'Elevage - Idele
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Ville de Châteauguay
 
DISPOSITIFS-MEDICAUX-PPT.pdf............
DISPOSITIFS-MEDICAUX-PPT.pdf............DISPOSITIFS-MEDICAUX-PPT.pdf............
DISPOSITIFS-MEDICAUX-PPT.pdf............cheddadzaineb
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de planchermansouriahlam
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...Institut de l'Elevage - Idele
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageInstitut de l'Elevage - Idele
 
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...Institut de l'Elevage - Idele
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfInstitut de l'Elevage - Idele
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestionyakinekaidouchi1
 

Dernier (20)

JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdf
 
firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdf
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdf
 
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdfJTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)
 
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfWBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
DISPOSITIFS-MEDICAUX-PPT.pdf............
DISPOSITIFS-MEDICAUX-PPT.pdf............DISPOSITIFS-MEDICAUX-PPT.pdf............
DISPOSITIFS-MEDICAUX-PPT.pdf............
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
 
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 

support_cours.pdf

  • 1. SGBD et L4G II2 KHCHERIF Raoudha Raoudha.khcherif@topnet.tn Bureau : 109 École Nationale des Sciences Informatiques
  • 2. KHCHERIFRaoudha SGBD et L4G 2 Plan du cours I. Architecture d‟un SGBD II. Le Langage de définition de Données III. Le Langage de manipulation de données IV. Le Langage PL/SQL
  • 3. KHCHERIFRaoudha SGBD et L4G 3 I. Architecture d’un SGBD Définitions: BD: Collections de données cohérentes et structurées Système de Gestion de Bases de Données (SGBD) : Logiciel(s) assurant structuration, stockage, maintenance, mise à jour et consultation des données d’une BD
  • 4. KHCHERIFRaoudha SGBD et L4G 4 I.1 Objectifs des SGBD • Indépendance physique : un remaniement de l’organisation physique des données n’entraîne pas de modification dans les programmes d’application (traitements) • Indépendance logique : un remaniement de l’organisation logique des fichiers (ex. nouvelle rubrique) n’entraîne pas de modification dans les programmes d’application non concernés
  • 5. KHCHERIFRaoudha SGBD et L4G 5 I.1 Objectifs des SGBD • Manipulation facile des données : un utilisateur non-informaticien doit pouvoir manipuler simplement les données (interrogation et mise à jour) • Administration facile des données : un SGBD doit fournir des outils pour décrire les données, permettre le suivi de ces structures et autoriser leur évolution (tâche de l’administrateur BD)
  • 6. KHCHERIFRaoudha SGBD et L4G 6 I.1 Objectifs des SGBD • Efficacité des accès aux données : garantie d‟un bon débit (nombre de transactions exécutées par seconde) et d‟un bon temps de réponse (temps d‟attente moyen pour une transaction) • Redondance contrôlée des données : diminution du volume de stockage, pas de mise à jour multiple ni d‟incohérence
  • 7. KHCHERIFRaoudha SGBD et L4G 7 I.1 Objectifs des SGBD • Cohérence des données : ex. L‟âge d‟une personne doit être un nombre entier positif. Le SGBD doit veiller à ce que les applications respectent cette règle (contrainte d’intégrité). • Partage des données : utilisation simultanée les données par différentes applications • Sécurité des données : les données doivent être protégées contre les accès non-autorisés ou en cas de panne
  • 8. KHCHERIFRaoudha SGBD et L4G 8 I.2 Fonctions des SGBD • Description des données : (LDD) • Recherche des données • Mise à jour des données • Transformation des données • Contrôle de l‟intégrité des données (respect des contraintes d‟intégrité) • Gestion de transactions (atomicité des transactions) et sécurité (mots de passe, etc.) }LMD
  • 9. KHCHERIFRaoudha SGBD et L4G 9 I.3 Architecture fonctionnelle type d’un SGBD • Architecture Ansi/Sparc: – Niveau externe: C‟est le niveau d‟expression des besoins des utilisateurs. Il formalise les préoccupations de chaque utilisateur et sera en final confronté au schéma conceptuel global. – Niveau conceptuel: Décrit la structure de la base de données globalement à tous les utilisateurs (limite la redondance) . Ce schéma décrit la structure de la base indépendamment de son implantation
  • 10. KHCHERIFRaoudha SGBD et L4G 10 I.3 Architecture fonctionnelle type d’un SGBD – Niveau interne : c‟est le niveau d‟implantation informatique de la solution conceptuelle: • Niveau interne logique: intègre une technologie particulière, comme par exemple la technologie des bases de données relationnelles. • Niveau interne physique: c‟est le niveau d‟implantation physique où l‟on tient compte d‟un environnement logiciel et matériel donné.
  • 11. KHCHERIFRaoudha SGBD et L4G 11 Architecture Ansi/Sparc
  • 12. KHCHERIFRaoudha SGBD et L4G 12 Exemple: institut de formation permanente • Schéma logique – Etudiant: nétudiant, nom, prénom, date_naissance – Enseignant: nom, prénom, statut, compte_bancaire – Cours: nomC, cycle, nom_enseignant – Inscription: nétudiant, nom_cours, note1, note2
  • 13. KHCHERIFRaoudha SGBD et L4G 13 Exemple (suite) • Schémas externes. • Schéma externe du professeur de base de données: – Etudiant_BD: nom, prénom, note1, note2, note_finale tel que Etudiant_BD résulte de la combinaison de Etudiant et Inscription du SL, tels qu'il existe une Inscription de cet étudiant pour le cours BD (nétudiant dans Etudiant = nétudiant dans Inscription et nom_cours dans Inscription = BD), et tel que note_finale = (note1 + note2)/2
  • 14. KHCHERIFRaoudha SGBD et L4G 14 Exemple (suite) • Schéma externe du service de gestion du personnel enseignant : – Professeur: nom, prénom, ncompte_bancaire, nombre_de_cours, liste(nom_cours) tel que Professeur résulte de la combinaison de Enseignant et Cours du SL, tels que liste(nom_cours) est la liste de nomC qui se trouvent dans Cours tel que nom_enseignant dans Cours = nom dans Enseignant, et tel que nombre_de_cours = Cardinalité (liste(nom_cours))
  • 15. KHCHERIFRaoudha SGBD et L4G 15 Exemple (suite) • Schéma interne (SI) – Etudiant: fichier FEtud, contenu: nom, prénom, date de naissance, nétudiant indexé sur nétudiant, index secondaire sur nom+prénom – Enseignant + cours: fichier FEnsCours, contenu: nom, prénom, statut, ncompte_bancaire, liste(nomC, cycle) tel que nom_enseignant dans Cours = nom dans Enseignant indexé sur nom, deux index secondaires, l'un sur nomC, l'autre sur cycle – Inscription: fichier FInscrits, contenu: nétudiant, nom_cours, note1, note2 indexé sur nétudiant, index secondaire sur nom_cours
  • 16. KHCHERIFRaoudha SGBD et L4G 16 KHCHERIFRaoudha SGBD et L4G 16
  • 17. KHCHERIFRaoudha SGBD et L4G 17 Stockage • Stockage des données dans les supports physiques • gestion des structures de mémorisation (fichiers) • gestion des structures d ‟accès (gestion des index, des clés,…)
  • 18. KHCHERIFRaoudha SGBD et L4G 18 Contrôle • Optimisation globale des requêtes • Gestion des conflits d ‟accès simultanés par plusieurs utilisateurs • Contrôle général de la cohérence de l ‟ensemble • Coordination et suivi des processus en cours • Garantie du bon déroulement des actions entreprises
  • 19. KHCHERIFRaoudha SGBD et L4G 19 Dialogue • Analyse des demandes de l ‟utilisateur • Contrôle des droits d ‟accès de l ‟utilisateur • Présentation des résultats.
  • 20. KHCHERIFRaoudha SGBD et L4G 20 II. Le langage de Définition des Données (LDD SQL) • SQL = Structured Query Language, issu de SEQUEL (Structured English as a Query Language) • SQL permet la définition, la manipulation et le contrôle d’une base de données relationnelle. Il se base sur l’algèbre relationnelle. • SQL est un standard ANSI depuis 1986. • Nous adoptons dans ce chapitre la syntaxe de SQL*Plus (Oracle).
  • 21. KHCHERIFRaoudha SGBD et L4G 21 II.2 Créations de Table: CREATE TABLE • Forme simple • Transmise à l ‟interprète du LDD – vérification – création de la table • schémastockédans dictionnairededonnées • allocation des structuresphysiques CREATE TABLE Client (noClient INTEGER, nomClient VARCHAR(15), noTéléphone VARCHAR(15) )
  • 22. KHCHERIFRaoudha SGBD et L4G 22 La commande DESCRIBE • la commande DESCRIBE permet de retrouver le format d‟une table SQL> describe s_dept; Name Null? Type ------------------------------- -------- ---- ID NOT NULL NUMBER(7) NAME NOT NULL VARCHAR2(25) REGION_ID NUMBER(7)
  • 23. KHCHERIFRaoudha SGBD et L4G 23 Types de données SQL • CHAR(n): • chaîne de caractères de longueur fixe n • longueur par défaut 1 • longueur minimum 1,longueur maximum 255 • constantes: • „DUPONT‟ • „Dupont,Marc‟ • „Titre“Coucou”‟ • „1234‟ • „NULL‟
  • 24. KHCHERIFRaoudha SGBD et L4G 24 Type de données: VARCHAR2(n) • chaîne de caractères de longueur variable et de taille maximum n – Longueur maximale : 32767 octets • uniquement sur Oracle sinon CHAR VARYING(n) • constantes identiques a CHAR(n)
  • 25. KHCHERIFRaoudha SGBD et L4G 25 Type de données: NUMBER(p) • nombre entier positif, négatif ou nul de p chiffres • constantes: – 0 – +0 – +1234 – -123123 – 1234
  • 26. KHCHERIFRaoudha SGBD et L4G 26 Type de données: NUMBER(p,s) • nombre réel en virgule fixe de p chiffres au total dont s après la virgule • constantes de type NUMBER(4,1): – 0,0 – 123,5 – -123,7 – -3,0 • d'après la configuration, il faut utiliser „.‟ ou „,‟ • certains SQL utilisent NUMERIC(p,s)
  • 27. KHCHERIFRaoudha SGBD et L4G 27 Type de données: LONG • chaîne de caractères de taille variable jusqu'à 2 Gbytes • limité à un seul attribut par table
  • 28. KHCHERIFRaoudha SGBD et L4G 28 Type de données: DATE • date (siècle, année, mois, jour, heure, minute, seconde) • constantes – „07-OCT-97‟ – „30-FEB-97‟ pas correct ! – „01-FEB-98‟ ou „01-FEV-98‟ – SYSDATE == date et heure actuelle • l'arithmétiquefonctionne sur les dates: – „10-OCT-99‟ - „09-OCT-99‟ == 1 – „07-OCT-96‟ + 10 == „17-OCT-96‟ – Par défaut DD-MON-YY (18-DEC-02) – Fonction TO_DATE Exemple : start_date := to_date(‟29-SEP-2003‟,‟DD-MON-YYYY‟); start_date := to_date(‟29-SEP-2003:13:01‟,‟DD-MON-YYYY:HH24:MI‟);
  • 29. KHCHERIFRaoudha SGBD et L4G 29 La valeur NULL • la valeur NULL est spéciale – NULL appartient à tous les domaines: CHAR, LONG, NUMBER, … – signifie que la ligne n‟a pas de valeur pour cet attribut • ne pas confondre avec – „„ – 0 – 0.0
  • 30. KHCHERIFRaoudha SGBD et L4G 30 Contrainte NOT NULL • lors de la création d‟une table on peut spécifier que certains attributs ne peuvent prendre la valeur NULL CREATE TABLE s_dept (id NUMBER(7) NOT NULL, name VARCHAR2(25) , region_id NUMBER(7) ) ;
  • 31. KHCHERIFRaoudha SGBD et L4G 31 Définition des clés primaires et étrangères • Clé primaire : CONSTRAINT nom_contrainte PRIMARY KEY (attribut_clé [, attribut_clé2, …]) • Clé étrangère : CONSTRAINT nom_contrainte FOREIGN KEY (attribut_clé_ét) REFERENCES table(attribut)
  • 32. KHCHERIFRaoudha SGBD et L4G 32 Définition des clés (exemple) CREATE TABLE Client ( NumCli NUMBER(3), Nom CHAR(30), DateNaiss DATE, Salaire NUMBER(8,2), NumEmp NUMBER(3), CONSTRAINT cle_pri PRIMARY KEY (NumCli), CONSTRAINT cle_etr FOREIGN KEY (NumEmp) REFERENCES EMPLOYEUR(NumEmp));
  • 33. KHCHERIFRaoudha SGBD et L4G 33 Définition des contraintes d’intégrités • Contrainte de domaine : CONSTRAINT nom_cont CHECK (condition) • Exemple: CREATE TABLE Client ( NumCli NUMBER(3), Nom CHAR(30), DateNaiss DATE, Salaire NUMBER(8,2), NumEmp NUMBER(3), CONSTRAINT cle_pri PRIMARY KEY (NumCli), CONSTRAINT cle_etr FOREIGN KEY (NumEmp) REFERENCES EMPLOYEUR(NumEmp), CONSTRAINT date_ok CHECK (DateNaiss <SYSDATE));
  • 34. KHCHERIFRaoudha SGBD et L4G 34 Définitions des index • Création d’index (accélération des accès) CREATE [UNIQUE] INDEX nom_index ON nom_table (attribut [ASC|DESC], …); • UNIQUE pas de double • ASC/DESC ordre croissant ou décroissant CREATE UNIQUE INDEX Icli ON Client (NumCli); • Destructions : DROP TABLE nom_table; DROP INDEX nom_index;
  • 35. KHCHERIFRaoudha SGBD et L4G 35 Modification du schéma d’une table • Ajout d’attributs ALTER TABLE nom_table ADD (attribut TYPE, …); ex. ALTER TABLE Client ADD (tel NUMBER(8)); • Modifications d’attributs ALTER TABLE nom_table MODIFY (attribut TYPE, …); ex. ALTER TABLE Client MODIFY (tel NUMBER(10)); • Suppression de contraintes ALTER TABLE nom_table DROP CONSTRAINT nom_contrainte;
  • 36. KHCHERIFRaoudha SGBD et L4G 36 III. Le Langage de Manipulation de données (LMD SQL) III.1 Syntaxe générale d’une requête: SELECT [ALL|DISTINCT] attribut(s) FROM table(s) [WHERE condition] [GROUP BY attribut(s) [HAVING condition]] [ORDER BY attribut(s) [ASC|DESC]]; • Tous les tuples d’une table ex. SELECT * FROM Client; • Tri du résultat ex. Par ordre alphabétique inverse de nom SELECT * FROM Client ORDER BY Nom DESC;
  • 37. KHCHERIFRaoudha SGBD et L4G 37 BD exemple • client ( numcli , nom, prenom, adresse, codepost, ville, tel); • produit ( numprod, designation, prixunit, qtestock ); • commande ( numcom, numcli, idvendeur, datec, quantite, numprod); • vendeur ( idvendeur, nomvendeur, qualité, salaire, commission));
  • 38. KHCHERIFRaoudha SGBD et L4G 38 Interrogation des données • Calculs ex. Calcul de prix TTC SELECT PrixUni+PrixUni*0.206 FROM Produit; • Projection ex. Noms et Prénoms des clients, uniquement SELECT Nom, Prenom FROM Client; • Restriction ex. Clients qui habitent à Tunis SELECT * FROM Client WHERE Ville = ‘Tunis’;
  • 39. KHCHERIFRaoudha SGBD et L4G 39 Interrogation des données • ex. Commandes en quantité au moins égale à 3 SELECT * FROM Commande WHERE Quantite >= 3; • ex. Produits dont le prix est compris entre 50 et 100 DT SELECT * FROM Produit WHERE PrixUni BETWEEN 50 AND 100; • ex. Commandes en quantité indéterminée SELECT * FROM Commande WHERE Quantite IS NULL;
  • 40. KHCHERIFRaoudha SGBD et L4G 40 Interrogation des données • ex. Clients habitant une ville dont le nom se termine par Menzel SELECT * FROM Client WHERE Ville LIKE ‘%Menzel’; • ‘Menzel%’  commence par Menzel • ‘%Men%’  contient le mot Men – le joker„_‟ peut être remplacépar n‟importequel caractère – le joker„%‟ peut être remplacépar 0, 1, 2, … caractères
  • 41. KHCHERIFRaoudha SGBD et L4G 41 Interrogation des données • ex. Prénoms des clients dont le nom est Mohamed, Ahmed ou Mahmoud SELECT Prenom FROM Client WHERE Nom IN (‘Ahmed’, ‘Mahmoud’, ‘Mohamed’); • spécifie une liste de constantes dont une doit égaler le premier terme pour que la condition soit vraie • pour des NUMBER, CHAR, VARCHAR, DATE • NB : Possibilité d’utiliser la négation pour tous ces prédicats : NOT BETWEEN, NOT NULL, NOT LIKE, NOT IN.
  • 42. KHCHERIFRaoudha SGBD et L4G 42 Fonctions d’agrégat • Elles opèrent sur un ensemble de valeurs, fournissent une valeur unique – AVG() : moyenne des valeurs – SUM() : somme des valeurs – MIN(), MAX() : valeur minimum, valeur maximum – COUNT() : nombre de valeurs • ex. Moyenne des prix des produits SELECT AVG(PrixUni) FROM Produit;
  • 43. KHCHERIFRaoudha SGBD et L4G 43 Opérateur DISTINCT • ex. Nombre total de commandes SELECT COUNT(*) FROM Commande; SELECT COUNT(NumCli) FROM Commande; • ex. Nombre de clients ayant passé commande SELECT COUNT( DISTINCT NumCli) FROM Commande;
  • 44. KHCHERIFRaoudha SGBD et L4G 44 Exemple • Table COMMANDE (simplifiée) NumCli Date Quantite 1 22/09/99 1 3 22/09/99 5 3 22/09/99 2  COUNT(NumCli) Résultat = 3  COUNT(DISTINCT NumCli)  Résultat = 2
  • 45. KHCHERIFRaoudha SGBD et L4G 45 Jointure • Consiste en un produit cartésien ou certaines lignes seulement sont sélectionnées via la clause WHERE • ex. Liste des commandes avec le nom des clients SELECT Nom, Date, Quantite FROM Client, Commande WHERE Client.NumCli = Commande.NumCli; • ex. Idem avec le numéro de client en plus SELECT C1.NumCli, Nom, Date, Quantite FROM Client C1, Commande C2 WHERE C1.NumCli = C2.NumCli ORDER BY Nom; • NB : Utilisation d’alias (C1 et C2) pour alléger l’écriture + tri par nom.
  • 46. KHCHERIFRaoudha SGBD et L4G 46 Jointure exprimée avec le prédicat IN • ex. Nom des clients qui ont commandé le 23/09 SELECT Nom FROM Client WHERE NumCli IN (SELECT NumCli FROM Commande WHERE Date = „23-09-2000‟ ); NB : Il est possible d‟imbriquer des requêtes.
  • 47. KHCHERIFRaoudha SGBD et L4G 47 Prédicats EXISTS / NOT EXISTS • ex. Clients qui ont passé au moins une commande [n ’ont passé aucune commande] SELECT * FROM Client C1 WHERE [NOT] EXISTS ( SELECT * FROM Commande C2 WHERE C1.NumCli = C2.NumCli );
  • 48. KHCHERIFRaoudha SGBD et L4G 48 Prédicats ALL / ANY • ex. Numéros des clients qui ont commandé au moins un produit en quantité supérieure à chacune [à au moins une] des quantités commandées par le client n° 1. SELECT DISTINCT NumCli FROM Commande WHERE Quantite > ALL [ANY] ( SELECT Quantite FROM Commande WHERE NumCli = 1 );
  • 49. KHCHERIFRaoudha SGBD et L4G 49 Groupement • permet de créer des groupes de lignes pour appliquer des fonctions d‟agrégat sur les groupes – il est possible de créer des groupes sur plusieurs attributs • ex. Quantité totale commandée par chaque client SELECT NumCli, SUM(Quantite) FROM Commande GROUP BY NumCli; • ex. Nombre de produits différents commandés... SELECT NumCli, COUNT(DISTINCT NumProd) FROM Commande GROUP BY NumCli;
  • 50. KHCHERIFRaoudha SGBD et L4G 50 Groupement • ex. Quantité moyenne commandée pour les produits faisant l’objet de plus de 3 commandes SELECT NumProd, AVG(Quantite) FROM Commande GROUP BY NumProd HAVING COUNT(*)>3; Attention : La clause HAVING ne s’utilise qu’avec GROUP BY.
  • 51. KHCHERIFRaoudha SGBD et L4G 51 Opérations ensemblistes • INTERSECT, MINUS, UNION – les deux tableaux opérandesdoiventavoirunedescriptionidentique: • nombre de colonnes • domaines des valeurs de colonnes – structuregénérale • co-requête OPERATEUR co-requête • ou chaque co-requête est une instruction SELECT ex. Numéro des produits qui soit ont un prix inférieur à 100 DT, soit ont été commandés par le client n° 2 SELECT NumProd FROM Produit WHERE PrixUni<100 UNION SELECT NumProd FROM Commande WHERE NumCLi=2;
  • 52. KHCHERIFRaoudha SGBD et L4G 52 • mécanisme très puissant mais d‟un emploi subtil ! • = une requête SELECT insérée dans la clause WHERE d‟une autre requête SELECT • bien sur, une sous-requête peut contenir une sous-sous-requête ! Les sous-requêtes
  • 53. KHCHERIFRaoudha SGBD et L4G 53 • peuvent retourner – une seule valeur – une liste de valeurs • une sous-requête constitue le second membre d‟une comparaison dans la clause WHERE Les sous-requêtes
  • 54. KHCHERIFRaoudha SGBD et L4G 54 SELECT last_name, salary FROM s_emp WHERE salary >= (SELECT AVG(salary) FROM s_emp); LAST_NAME SALARY ------------------------- ------------------ Velasquez 2500 Ngao 1450 Nagayama 1400 Quick-To-See 1450 ... sous-requête Les sous-requêtes retournant une valeur
  • 55. KHCHERIFRaoudha SGBD et L4G 55 SELECT last_name, salary FROM s_emp WHERE salary >= ALL (SELECT salary FROM s_emp WHERE dept_id = 10) ; LAST_NAME SALARY ------------------------- ------------------- Velasquez 2500 Ngao 1450 Quick-To-See 1450 Ropeburn 1550 Giljum 1490 Les sous-requêtes retournant une liste de valeurs
  • 56. KHCHERIFRaoudha SGBD et L4G 56 • clause ORDER BY y est interdite • chaque sous-requête doit être entourée de parenthèses • clause SELECT d‟une sous-requête ne peut contenir qu‟un seul attribut • les attributs définis dans la requête principale peuvent être utilises dans la sous-requête • les attributs définis dans la sous-requête ne peuvent pas être utilises dans la requête principale Contraintes des sous-requêtes
  • 57. KHCHERIFRaoudha SGBD et L4G 57 • dans le cas de sous-requêtes retournant une seule valeur, les opérateurs classiques (<, >, …) peuvent être appliques • dans le cas de sous-requêtes retournant une liste de valeurs, il faut utiliser les quantificateurs – ANY: l‟expression est vraie si une des valeurs de la sous-requête vérifie la comparaison – ALL: l‟expression est vraie si toutes les valeurs de la sous-requête vérifient la comparaison • Note: IN équivaut à = ANY Opérateurs de comparaison et les sous-requêtes
  • 58. KHCHERIFRaoudha SGBD et L4G 58 • la clause WHERE d‟une requête principale peut contenir plusieurs sous-requêtes reliées par les connecteurs AND et OR Les sous-requêtes multiples
  • 59. KHCHERIFRaoudha SGBD et L4G 59 Mise à jour des données • Ajout d’un tuple INSERT INTO nom_table VALUES (val_att1, val_att2, …); ex. INSERT INTO Produit VALUES (400, ‘Nouveau produit’, 78.90); • Mise à jour d’un attribut UPDATE nom_table SET attribut=valeur [WHERE condition]; ex. UPDATE Client SET Nom=‘Dudule’ WHERE NumCli = 3;
  • 60. KHCHERIFRaoudha SGBD et L4G 60 Mise à jour des données • Suppression de tuples DELETE FROM nom_table [WHERE condition]; ex. DELETE FROM Produit; ex. DELETE FROM Client WHERE Ville = ‘Tunis’;
  • 61. KHCHERIFRaoudha SGBD et L4G 61 Les vues • Vue : table virtuelle calculée à partir d‟autres tables grâce à une requête • Définition d’une vue CREATE VIEW nom_vue AS requête; ex. CREATE VIEW Noms AS SELECT Nom, Prenom FROM Client;
  • 62. KHCHERIFRaoudha SGBD et L4G 62 Les vues • Intérêt des vues – Simplification de l’accès aux données en masquant les opérations de jointure ex. CREATE VIEW Prod_com AS SELECT P.NumProd, Dési, PrixUni, Date, Quantite FROM Produit P, Commande C WHERE P.NumProd=C.NumProd; SELECT NumProd, Dési FROM Prod_com WHERE Quantite>10;
  • 63. KHCHERIFRaoudha SGBD et L4G 63 Les vues • Intérêt des vues – Sauvegarde indirecte de requêtes complexes – Présentation de mêmes données sous différentes formes adaptées aux différents usagers particuliers – Support de l’indépendance logique ex. Si la table Produit est remaniée, la vue Prod_com doit être refaite, mais les requêtes qui utilisent cette vue n’ont pas à être remaniées.
  • 64. KHCHERIFRaoudha SGBD et L4G 64 Les vues • Intérêt des vues – Renforcement de la sécurité des données par masquage des lignes et des colonnes sensibles aux usagers non habilités • Problèmes de mise à jour, restrictions – La mise à jour de données via une vue pose des problèmes et la plupart des systèmes impose d’importantes restrictions.
  • 65. KHCHERIFRaoudha SGBD et L4G 65 Les vues • Problèmes de mise à jour, restrictions – Le mot clé DISTINCT doit être absent. – La clause FROM doit faire référence à une seule table. – La clause SELECT doit faire référence directement aux attributs de la table concernée (pas d’attribut dérivé). – Les clauses GROUP BY et HAVING sont interdites.
  • 66. KHCHERIFRaoudha SGBD et L4G 66 IV.Le Langage PL/SQL IV.1.Généralités PL/SQL :  Langage procédural Extension de SQL Déclaration de variables et de constantes Définition de sous-programmes Gestion des erreurs à l‟exécution (exceptions) Manipulation de données avec SQL
  • 67. KHCHERIFRaoudha SGBD et L4G 67 STRUCTURE D‟UN PROGRAMME PL/SQL Déclaration de variables, types, curseurs, exceptions,.. (Optionnel) Corps du programme : Code SQL (Obligatoire) Gestion des erreurs (Optionnel) BLOC PL/SQL : DECLARE (Déclaration de variables et curseurs) ….. BEGIN ….. …. EXCEPTION (Traitement des cas d‟erreur signalés par le SGBD) ….. END ; II – LE LANGAGE PL/SQL
  • 68. KHCHERIFRaoudha SGBD et L4G 68 PORTEE DES OBJETS Un bloc qui déclare un objet peut y accéder ainsi que tous les sous blocs (sous bloc : bloc imbriqué dans un autre). Par contre tout objet déclaré dans un sous bloc n‟est pas accessible au niveau du bloc supérieur. UTILISATION EN CLIENT SERVEUR Requêtes SQL exécutées séquentiellement : Envoi d‟un message du client vers le serveur pour chaque requête et retour du serveur vers le client Bloc PL/SQL : Envoi d‟un message pour tout le bloc et un seul retour vers le client
  • 69. KHCHERIFRaoudha SGBD et L4G 69 IV.2 Bloc PL/SQL DECLARE --Déclaration constantes/variables BEGIN --Commandes/instructions EXCEPTION --Traitement des erreurs à l’exécution. END;
  • 70. KHCHERIFRaoudha SGBD et L4G 70 DECLARATION DES VARIABLES Identificateur [CONSTANT] typededonnées [NOT NULL] [ :=| DEFAULT expression] ; Types de données : Caractères (CHAR, VARCHAR, VARCHAR2, LONG, CLOB,..) Numériques (NUMBER) Date/heure (DATE, INTERVAL,….) Données binaires (BLOB, RAW, …) Adresse d‟enregistrements (ROWID) Variable du type d‟une colonne (%TYPE) Nom_variable Nom_table.Nom_colonne%TYPE Variable du type enregistrement d‟un table (%ROWTYPE) Nom_variable Nom_table %ROWTYPE Variable de type RECORD : TYPE Nom_variable IS RECORD (……..) ;
  • 71. KHCHERIFRaoudha SGBD et L4G 71 IV.3 Déclaration • Partie déclarative d‟un bloc PL/SQL ou d‟un sous- programme • Types usuels : INTEGER, REAL, STRING, DATE, BOOLEAN + types SQL • Variables – ex. Date_naissance DATE; compteur INTEGER:=0; -- Valeur par défaut compteur INTEGER DEFAULT 0; -- idem  id CHAR(5) NOT NULL:=„AP001‟;
  • 72. KHCHERIFRaoudha SGBD et L4G 72 IV.3. Déclarations • Constantes – ex. euro CONSTANT REAL:=6.55957; • Type d’une autre variable – ex. credit REAL; – debit credit%TYPE; • Type d’un tuple d’une table – ex. un_client client%ROWTYPE; • Tableaux : 1) Déclaration d‟un type tableau 2) Déclaration d‟une variable de ce type
  • 73. KHCHERIFRaoudha SGBD et L4G 73 IV.3. Déclarations • Tableaux – ex. TYPE Tab_entiers TABLE OF INTEGER INDEX BY BINARY_INTEGER; – TYPE Tab_cli TABLE OF client.nom%TYPE INDEX BY BINARY_INTEGER; • un_entier Tab_entiers; • un_client Tab_cli;
  • 74. KHCHERIFRaoudha SGBD et L4G 74 IV.3. Déclarations • Enregistrements personnalisés 1) Définition d’un type enregistrement – ex. TYPE Enr_four IS RECORD (numero fournisseur.numfour%TYPE, raison_sociale CHAR(20)); 2) Définition d’une variable de ce type – ex. un_fournisseur Enr_four;
  • 75. KHCHERIFRaoudha SGBD et L4G 75 V.4. Instructions de base • Affectation – ex. numero:=0; – numero:=numero+1; – SELECT numcli INTO numero FROM client WHERE numcli=numero+1; • Utilisation des tableaux – ex. i:=1; – un_entier(i):=i*2; – NB : i doit être de type BINARY_INTEGER.
  • 76. KHCHERIFRaoudha SGBD et L4G 76 V.4. Instructions de base • Utilisation des enregistrements personnalisés – ex. un_fournisseur.numero:=4589; – un_fournisseur.raison_sociale:=„COGIP‟; – SELECT numfour, raisonsoc INTO un_fournisseur FROM fournisseur WHERE numfour=4589;
  • 77. KHCHERIFRaoudha SGBD et L4G 77 V.5. Structures de contrôle • Instruction sélective – IF-THEN, IF-THEN-ELSE ou IF-THEN- ELSIF IF condition1 THEN -- Instructions ELSEIF condition2 THEN -- Instructions ELSE -- Instructions END IF;
  • 78. KHCHERIFRaoudha SGBD et L4G 78 CASE variable WHEN expr1 THEN instructions1; WHEN expr2 THEN instructions2; …… WHEN exprn THEN instructionsn; [ELSE instructionsm;] END CASE; CASE variable WHEN condition1 THEN instructions1; WHEN condition2 THEN instructions2; …… WHEN condition_n THEN instructionsn; [ELSE instructionsm;] END CASE; Test conditionnel
  • 79. KHCHERIFRaoudha SGBD et L4G 79 Test conditionnel • CASE – CASE sélecteur WHEN expression1 THEN résultat1 WHEN expression2 THEN résultat2 ELSE résultat3 END;
  • 80. KHCHERIFRaoudha SGBD et L4G 80 Test conditionnel Exemple : val := CASE city WHEN „TORONTO‟ THEN „RAPTORS‟ WHEN „LOS ANGELES‟ THEN „LAKERS‟ ELSE „NO TEAM‟ END;
  • 81. KHCHERIFRaoudha SGBD et L4G 81 V.5. Structures de contrôle • Instructions itératives FOR compteur IN [REVERSE] min..max LOOP -- Instructions END LOOP; WHILE condition LOOP -- Instructions END LOOP; LOOP -- Instructions END LOOP;
  • 82. KHCHERIFRaoudha SGBD et L4G 82 V.5. Structures de contrôle • Branchements -- Saut inconditionnel GOTO étiquette; -- Sortie de boucle EXIT WHEN condition; NB : À utiliser avec énormément de modération !
  • 83. KHCHERIFRaoudha SGBD et L4G 83 V.6. Curseurs • Curseur : structure de données permettant de stocker le résultat d‟une requêtes qui retourne plusieurs tuples • Déclaration : CURSOR nom_curs IS requête; – ex. CURSOR calcul IS SELECT numprod, prixuni*1.206 prixttc FROM produit; NB : Un tuple du curseur sera de type calcul%ROWTYPE.
  • 84. KHCHERIFRaoudha SGBD et L4G 84 V.6. Curseurs • Ouverture d’un curseur : OPEN nom_curs; • Gestion automatique d’un curseur ex. FOR tuple IN calcul LOOP var1:=tuple.numprod; var2:=tuple.prixttc; END LOOP; • Gestion « manuelle » ex.LOOP FETCH calcul INTO tuple; EXIT WHEN calcul%NOTFOUND; … END LOOP
  • 85. KHCHERIFRaoudha SGBD et L4G 85 V.6. Curseurs • Attributs des curseurs – "%NOTFOUND : FALSE si FETCH retourne un résultat – "%FOUND : opposé logique de %NOTFOUND – "%ROWCOUNT : Nombre de lignes lues – "%ISOPEN : TRUE si le curseur est ouvert • Fermeture d’un curseur : CLOSE nom_curs;
  • 87. KHCHERIFRaoudha SGBD et L4G 87 Exemple
  • 88. KHCHERIFRaoudha SGBD et L4G 88 Ligne courante d’un curseur • La ligne courante d‟un curseur est déplacée à chaque appel de l‟instruction fetch • On est parfois amené à modifier la ligne courante pendant le parcours du curseur • Pour cela on peut utiliser la clause « where current of » pour désigner cette ligne courante dans un ordre LMD (insert, update, delete) • Il est nécessaire d‟avoir déclaré le curseur avec la clause FOR UPDATE OF pour que le bloc compile
  • 89. KHCHERIFRaoudha SGBD et L4G 89 Exemple • DECLARE CURSORc IS select matr, nome, sal from emp wheredept = 10 FOR UPDATE OF emp.sal; ……………………………………….. if salaireis not null then total := total + salaire; else -- on met 0 à la place de null pour le salaire updateemp set sal = 0 where current of c; • end if;
  • 91. KHCHERIFRaoudha SGBD et L4G 91 Select … for update • Select classique : non verrouillé • Problème avec les curseurs • Solution : Select … for update – Résultat : verrouiller toutes les lignes jusqu‟au prochain commit
  • 92. KHCHERIFRaoudha SGBD et L4G 92 V.7. Exceptions • À chaque erreur à l‟exécution, une exception est levée. Ces exceptions sont gérées par des routines séparées. • Fonctions PL/SQL pour la gestion d’erreurs – "SQLCODE : Code de la dernière exception levée – "SQLERRM : Message d‟erreur associé
  • 93. KHCHERIFRaoudha SGBD et L4G 93 V.7. Exceptions • Exceptions personnalisées – Déclaration : nom_exc EXCEPTION; – Lever l’exception : IF condition THEN RAISE nom_exc; END IF; • Traitement des exceptions – WHEN nom_exc THEN -- Instruction – ex. WHEN probleme THEN RAISE_APPLICATION_ERROR(-20501,‟Erreur !‟);
  • 94. KHCHERIFRaoudha SGBD et L4G 94 Les exceptions et erreurs • NO_DATA_FOUND – Quand Select into ne retourne aucune ligne • TOO_MANY_ROWS – Quand Select into retourne plusieurs lignes • OTHERS – Toutes erreurs non interceptées • RAISE_APPLICATION_ERROR – Pour retourner une message d‟erreur – Numéro d‟erreur entre -20000 et -20999 • LOGIN_DENIED Connexion incorrecte • NOT_LOGGED_ON Pas de connexion • ROWTYPE_MISMATCH Erreur de type • STORAGE_ERROR Dépassement de capacité mémoire • ZERO_DIVIDE Division par zéro
  • 95. KHCHERIFRaoudha SGBD et L4G 95 V.8. Exemple de programme PL/SQL -- Calcul du prix TTC des produits -- et recopie dans la table PRODTTC DECLARE nbp NUMBER(3); aucun_produit EXCEPTION; CURSOR calcul IS SELECT numprod, prixuni*1.206 prixttc FROM produit; tuple calcul%ROWTYPE; BEGIN -- Comptage des produits SELECT COUNT(*) INTO nbp FROM produit; -- Test « il existe des produits » ou pas ? IF nbp = 0 THEN RAISE aucun_produit; END IF;
  • 96. KHCHERIFRaoudha SGBD et L4G 96 V.8. Exemple de programme PL/SQL -- Recopie des valeurs dans la table prodttc FOR tuple IN calcul LOOP INSERT INTO prodttc VALUES (tuple.numprod, tuple.prixttc); END LOOP; -- Validation de la transaction COMMIT; EXCEPTION WHEN aucun_produit THEN RAISE_APPLICATION_ERROR(-20501, „Erreur : table client vide‟); END;
  • 97. KHCHERIFRaoudha SGBD et L4G 97 Affichage • Activer le retour écran – set serveroutput on size 10000 • Affichage – dbms_output.put_line(chaîne); – Utilise || pour faire une concaténation
  • 98. KHCHERIFRaoudha SGBD et L4G 98 Exemple n°1 DECLARE i number(2); BEGIN FOR i IN 1..5 LOOP dbms_output.put_line(„Nombre : ‟ || i ); END LOOP; END;
  • 99. KHCHERIFRaoudha SGBD et L4G 99 Exemple n°2 DECLARE compteur number(3); i number(3); BEGIN select count(*) into compteur from clients; FOR i IN 1..compteur LOOP dbms_output.put_line('Nombre : ' || i ); END LOOP; END;
  • 101. KHCHERIFRaoudha SGBD et L4G 101 FONCTIONSETPROCEDURESSTOCKEES(CATALOGUEES) Programmes PL/SQL compilés et stockés dans le dictionnaire de données Les procédures stockées peuvent être appelées dans : Un bloc PL/SQL Une fonction ou une procédure Dans un programme en langage évolué (C, Fortran, ..) Sécurité : droit d’accès sur les procédures GRANT EXECUTE ON Nom_procédure TO Nom_utilisateur ; Intégrité : Utilisation de COMMIT-ROLLBACK lors de traitements dépendants exécutés dans le même bloc ; Performance : réduction du nombre d’appels à la base Productivité : simplicité de maintenance
  • 102. KHCHERIFRaoudha SGBD et L4G 102 CREATION DE PROCEDURES OU FONCTIONS : CREATE [OR REPLACE] PROCEDURE Nom_procédure [(paramètre1 IN | OUT | IN OUT type [,paramètre2 IN | OUT | IN OUT type] ….. [,paramètren IN | OUT | IN OUT type])] IS Déclaration de variables locales ; BEGIN Corps_de_la_procédure END; CREATE [OR REPLACE] FUNCTION Nom_fonction [(paramètre1 IN | OUT | IN OUT type [,paramètre2 IN | OUT | IN OUT type] ….. [,paramètren IN | OUT | IN OUT type])] RETURN typeSQL IS Déclaration de variables locales ; BEGIN Corps_de_la_procédure END;
  • 103. KHCHERIFRaoudha SGBD et L4G 103 APPELD’UNE PROCEDURE OU D’UNE FONCTION : EXECUTE Nom_Procédure(……) ; EXECUTE Nom_Fonction(……) ; SELECT …., Nom_Fonction(….),….. Variable := Nom_Fonction(…….) ;
  • 104. KHCHERIFRaoudha SGBD et L4G 104 Les procédures create or replace procedure list_nom_clients IS BEGIN DECLARE nom varchar2(30); CURSOR get_nom_clients IS select nom,adresse from clients; BEGIN FOR toto IN get_nom_clients LOOP dbms_output.put_line('Employé : ' || UPPER(toto.nom) ||' Ville : '|| toto.adresse); END LOOP; END;
  • 105. KHCHERIFRaoudha SGBD et L4G 105 Les procédures create or replace procedure list_nom_clients (ville IN varchar2, result OUT number) IS BEGIN DECLARE CURSOR get_nb_clients IS select count(*) from clients where adresse=ville; BEGIN open get_nb_clients; fetch get_nb_clients INTO result; end; end;
  • 106. KHCHERIFRaoudha SGBD et L4G 106 Récupération des résultats • Déclarer une variable SQL> variable nb number; • Exécuter la fonction SQL> execute list_nom_clients('paris',:nb) • Visualisation du résultat SQL> print • Description des paramètres SQL> desc nom_procedure
  • 107. KHCHERIFRaoudha SGBD et L4G 107 Les fonctions createor replace function nombre_clients return number IS BEGIN DECLARE i number; CURSORget_nb_clients IS select count(*)from clients; BEGIN open get_nb_clients; fetch get_nb_clientsINTO i; return i; end; end; • Exécution:select nombre_clients()fromdual
  • 108. KHCHERIFRaoudha SGBD et L4G 108 Procédures et fonctions • Suppression de procédures ou fonctions – DROP PROCEDURE nom_procedure – DROP FUNCTION nom_fonction • Table système contenant les procédures et fonctions : user_source
  • 109. KHCHERIFRaoudha SGBD et L4G 109 Exercices • Réalisez une procédure list_tables qui donne le nom de toutes vos tables • Réalisez une procédure UPDATENOM qui remplit correctement la colonne NOM_PIECE de clients par rapport à la table fournisseurs • Réalisez une procédure UPDATEPRIX qui met à jour tous les prix de la table clients
  • 110. KHCHERIFRaoudha SGBD et L4G 110 Procédure LIST_TABLES create or replace procedure list_tables IS BEGIN DECLARE CURSOR get_nom IS select table_name from user_tables; BEGIN FOR nom IN get_nom LOOP dbms_output.put_line('Nom de la table : ' || toto.table_name); END LOOP; END;
  • 111. KHCHERIFRaoudha SGBD et L4G 111 Procédure UPDATENOM CREATE OR REPLACE PROCEDURE updatenom IS BEGIN DECLARE nompiece varchar2(30); cursor toto IS SELECT distinct fournisseurs.reference, fournisseurs.nom_piece FROM fournisseurs; BEGIN FOR nompiece IN toto LOOP UPDATE clients SET clients.nom_piece=nompiece.nom_piece WHERE clients.reference=nompiece.reference; END LOOP; END; END;
  • 112. KHCHERIFRaoudha SGBD et L4G 112 Procédure UPDATEPRIX CREATE OR REPLACE PROCEDURE updateprix IS BEGIN DECLARE prixunit number(5); CURSOR toto IS SELECT clients.nom, clients.adresse, fournisseurs.prix_piece_unite FROM fournisseurs,clients WHERE fournisseurs.reference=clients.reference; BEGIN FOR prixunit IN toto LOOP UPDATE clients SET clients.prix=clients.quantite*prixunit.prix_piece_unite WHERE prixunit.nom=clients.nom and prixunit.adresse=clients.adresse; END LOOP; END; END;
  • 114. KHCHERIFRaoudha SGBD et L4G 114 V.9. Triggers • Trigger (déclencheur) : routine déclenchée automatiquement par des événements liés à des actions sur la base • Les triggers complètent les contraintes d‟intégrité en permettant des contrôles et des traitements plus complexes.
  • 115. KHCHERIFRaoudha SGBD et L4G 115 V.9.Triggers Types de triggers Insertion Suppression Mise à jour Avant 1 2 3 Après 4 5 6 D‟une table de la base
  • 116. KHCHERIFRaoudha SGBD et L4G 116 V.9.Triggers • Création en SQL*Plus : – CREATE [OR REPLACE] TRIGGER nom_trig BEFORE|AFTER INSERT|DELETE|UPDATE ON nom_table FOR EACH ROW -- Bloc PL/SQL contenant le -- traitement à effectuer • Variables spécifiques – :OLD.nom_attribut : valeur de l‟attribut avant mise à jour – :NEW.nom_attribut : valeur de l‟attribut après mise à jour
  • 117. KHCHERIFRaoudha SGBD et L4G 117 Accès aux valeurs modifiées • Utilisation de new et old • Si nous ajoutons un client dont le nom est toto, alors nous récupérons ce nom grâce à la variable :new.nom • Dans le cas de suppression ou modification, les anciennes valeurs sont dans la variable :old.nom
  • 118. KHCHERIFRaoudha SGBD et L4G 118 V.9. Triggers -- Exemple : test de clé primaire sur la table client CREATE ORREPLACE TRIGGER trig_clep BEFORE INSERT ON client FOREACH ROW DECLARE n INTEGER; cle_existeEXCEPTION; cle_nulleEXCEPTION; BEGIN -- Existence de la clé primaire SELECT COUNT(numcli)INTO n FROM client WHERE numcli=:NEW.numcli; IF n>0 THEN RAISE cle_existe; END IF
  • 119. KHCHERIFRaoudha SGBD et L4G 119 V.9. Triggers -- Valeurnulle IF :NEW.numcli IS NULL THEN RAISE cle_nulle; END IF; EXCEPTION WHEN cle_existe THEN RAISE_APPLICATION_ERROR(-20501,‘Clé primaire déjà utilisée !’); WHEN cle_nulle THEN RAISE_APPLICATION_ERROR(- 20502,‘La clé primaire doit avoir une valeur!’); END;
  • 121. KHCHERIFRaoudha SGBD et L4G 121 Les Packages? • Regroupement des types, éléments et sous programmes PL/SQL logiquement liés. • Se composent de deux parties – Une spécification – Un corps • Permettent à Oracle de lire immédiatement plusieurs objets en mémoire
  • 122. KHCHERIFRaoudha SGBD et L4G 122 Package Déclarationde la procédureA Définition de la procédureA Variable locale Spécification Corps de package
  • 123. KHCHERIFRaoudha SGBD et L4G 123 • Spécification : • CREATE [OR REPLACE] PACKAGENom_programmeAS Variables; PROCEDURE ….; FUNCTION ….RETURN …; ….. Exceptions; END [Nom_programme] ; • Implémentation : • CREATE [OR REPLACE] PACKAGEBODY Nom_programme » AS PROCEDURE…. BEGIN ….. END; FUNCTION….RETURN …; BEGIN …. END ; • END [Nom_programme] ;
  • 124. KHCHERIFRaoudha SGBD et L4G 124 Exemple • CREATEPACKAGEbankAS PROCEDURE transac; PROCEDURE detourne(valueNUMBER); • END bank; • CREATEPACKAGEBODY bankAS --commentaires PROCEDUREtransacIS BEGIN ... END transac; -- commentaires PROCEDUREdetourne(valueNUMBER)IS BEGIN ... END detourne; END bank; EXECUTE bank.detourne(1 000 000 000$);