Vous êtes sur la page 1sur 29

24/03/06

6 Le langage SQL Quelques liens


 Structured Query Language  Standard SQL:
– http://www.jcc.com/SQLPages/jccs_sql.htm
 Standard établi pour SGBD relationnel – http://www.cssinfo.com/ncitsgate.html

 Partie LDD  Tutoriel et liens:


http://www.contrib.andrew.cmu.edu/~shadow/sql.html
– Conceptuel : CREATE SCHEMA, TABLE,...
 Syntaxe SQL2 :
– Externe : CREATE VIEW, GRANT,… http://www.contrib.andrew.cmu.edu/~shadow/sql/sql2bnf.
– Interne : CREATE INDEX, CLUSTER,... aug92.txt
 http://www.sql-zone.com/
 Partie LMD
– SELECT, INSERT, DELETE, UPDATE
24/03/06 © Robert Godin. Tous droits réservés. 1 24/03/06 © Robert Godin. Tous droits réservés. 2

Origine Standard ANSI/ISO


 IBM Research (San Jose)  SQL86
– développement du prototype System/R – version préliminaire

– (Astrahan et al., 1976)  SQL89 (SQL, SQL1)


– niveau minimal supporté
 SQUARE  SQL92 (SQL2)
– algèbre relationnelle ~ anglais – support accru de l ’intégrité
– (Boyce, Chamberlin, King & Hammer, 1975) – trois niveaux : entrée (SQL1+), intermédiaire, complet
 SEQUEL – de plus en plus supporté

– Structured English QUEry Language  SQL99? (SQL3)


– extension objet, TRIGGER, ROLE, SQL/PSM, ...
– (Chamberlin, Astrahan, Eswaran, Chamberlin, Griffiths
– support très variable
& Lorie, 1976)
24/03/06 © Robert Godin. Tous droits réservés. 3 24/03/06 © Robert Godin. Tous droits réservés. 4

© Robert Godin. Tous droits réservés. 1


24/03/06

6.1 Spécification schéma Spécification schéma relationnel


relationnel avec SQL (LDD SQL) avec SQL (suite)

 Niveau conceptuel  Niveau externe


– Schéma des tables (TABLE) – Vues (VIEW)
 CREATE TABLE.  définie à partir d'autres tables (CREATE VIEW). Elle
– Domaines (DOMAIN) apparaît à l'utilisateur comme une table normale alors
qu'elle est en réalité dérivée à partir d'autres tables
 SQL2 intermédiaire : CREATE DOMAIN normales ou virtuelles.
– Contraintes d'intégrité – Privilèges d'accès
 PRIMARY KEY, FOREIGN KEY, UNIQUE KEY,  GRANT
CHECK, ASSERTION, TRIGGER
 Niveau interne
– non standardisé (e.g. CREATE INDEX)
24/03/06 © Robert Godin. Tous droits réservés. 5 24/03/06 © Robert Godin. Tous droits réservés. 6

6.1.1 Environnement, catalogue,


schéma et utilisateur SQL Dialecte Oracle
 DATABASE ~ catalogue
– une instance Oracle monte une DATABASE à la fois
 Nom du SCHEMA
– = authorizationID du propriétaire
 CLUSTER Oracle
– ≠ cluster de l ’environnement SQL2
– méthode d ’organisation de données par grappe

 Cluster
– ensemble de catalogues accessibles à une session
24/03/06 © Robert Godin. Tous droits réservés. 7 24/03/06 © Robert Godin. Tous droits réservés. 8

© Robert Godin. Tous droits réservés. 2


24/03/06

6.1.2 Création du schéma d'une


Syntaxe générale du CREATE TABLE
table en SQL (CREATE TABLE)

 Forme simple
 Syntaxe de spécificationDeColonne

 Transmise à l ’interprète du LDD


 Syntaxe de spécificationDeContrainte
– vérification
– création de la table
 schéma stocké dans dictionnaire de données
 allocation des structures physiques
– clause non standardisée pour organisation primaire
24/03/06 © Robert Godin. Tous droits réservés. 9 24/03/06 © Robert Godin. Tous droits réservés. 10

6.1.3 Types SQL Types SQL

 Numérique exact  Numérique approximatif


– INTEGER (ou INT) – REAL
 Entier (précision non standardisée)  Point flottant (précision non standardisée)
 Exemples : 2, 3, 459  Exemples : 3.27E-4, 24E5
– SMALLINT – DOUBLE PRECISION
 Petit entier (précision non standardisée)  Point flottant à double précision (non standardisée)
 Exemples : 2, 3, 459  Exemples : 3.27265378426E-4, 24E12
– NUMERIC(p, c) (ou DECIMAL(p, c) ou DEC(p, c)) – FLOAT(n)
 Nombre décimal avec p chiffres significatifs (excluant le point) et  Point flottant
c chiffres après le point – précision minimale est de n chiffres pour la mantisse
 Exemples : 2.5, 456.342, 6  Exemples : 3.27E-4, 24E5
24/03/06 © Robert Godin. Tous droits réservés. 11 24/03/06 © Robert Godin. Tous droits réservés. 12

© Robert Godin. Tous droits réservés. 3


24/03/06

Types SQL Types SQL


 Chaîne de caractères (VARYING et NATIONAL : SQL2 intermédiaire)  Date et temps (SQL2 intermédiaire; précision p: SQL2
– CHARACTER(n) (ou CHAR(n)) complet)
 Chaîne de caractère de taille fixe égale à n – DATE
 Exemples : 'G. Lemoyne-Allaire', 'Paul L''Heureux ’  année (quatre chiffres), mois (2 chiffres) et jour (2 chiffres)
– CHARACTER VARYING (n) (ou VARCHAR(n))  Exemple : DATE '1998-08-25'
 Taille variable (max de n caractères) – TIME[(p)]
– NATIONAL CHARACTER(n)  heure (2 chiffres), minutes (2 chiffres), secondes (2 +p chiffres)
 Ensemble de caractères alternatif spécifique à l'implémentation  Exemple : TIME '14:04:32.25'
– NATIONAL CHARACTER VARYING(n) – TIMESTAMP[(p)]
 Taille variable  DATE + TIME
– Création d ’ensembles de caractères alternatifs  Exemple : TIMESTAMP '1998-08-25 14:04:32.25'
 CREATE CHARACTER SET – INTERVAL
 COLLATION : relation d ’ordre des caractères
 Représente un intervalle de temps.

24/03/06 © Robert Godin. Tous droits réservés. 13 24/03/06 © Robert Godin. Tous droits réservés. 14

6.1.4 Suppression d’une


Types SQL
table (DROP TABLE)
 Booléen (SQL2 complet)
– BIT (n)
 Vecteur de n bits.  RESTRICT
Exemples : B'00100110', X'9F'

– rejet si élément dépendant existe
– BIT VARYING (n)
 taille variable (max = n)  ex: FOREIGN KEY
 Binaire long (SQL3)  CASCADE
– BINARY LARGE OBJECT (n) (BLOB(n))
 n : taille en octets (ex: 1024, 5K, 3M, 2G) – supprime élément dépendant
 Exemple : X ’52CF4 ’ (hexadecimal)

 Longue chaîne de caractère (SQL3)


– CHARACTER LARGE OBJECT (n) (CLOB(n))
– NATIONAL CHARACTER LARGE OBJECT (n) (NCLOB(n))
24/03/06 © Robert Godin. Tous droits réservés. 15 24/03/06 © Robert Godin. Tous droits réservés. 16

© Robert Godin. Tous droits réservés. 4


24/03/06

6.1.5 Modification du schéma de 6.1.6 Le dictionnaire de données SQL


table (ALTER TABLE) (INFORMATION_SCHEMA)

 Syntaxe  Normalisé en SQL2


 BD relationnelle
– contient les méta-données d ’un CATALOG
 DEFINITION_SCHEMA
– tables
 INFORMATION_SCHEMA
– VIEWS sur les tables du
DEFINITION_SCHEMA
24/03/06 © Robert Godin. Tous droits réservés. 17 24/03/06 © Robert Godin. Tous droits réservés. 18

Exemples de VIEWS du Dictionnaire de données Oracle avec SQL*plus

INFORMATION_SCHEMA
 SCHEMATA
– les SCHEMA créés par CURRENT_USER
 DOMAINS
– les DOMAIN accessibles par CURRENT_USER ou PUBLIC
 TABLES
– les noms des tables accessibles par CURRENT_USER ou PUBLIC
 VIEWS
– les vues accessibles par CURRENT_USER ou PUBLIC
 COLUMNS
– les colonnes des TABLE accessibles par CURRENT_USER ou PUBLIC
 TABLE_CONSTRAINTS
– contraintes des TABLE créées par CURRENT_USER
 CHECK_CONSTRAINTS
– contraintes CHECK des TABLE créées par CURRENT_USER
 ASSERTIONS
– ASSERTION créées par CURRENT_USER
 TABLE_PRIVILEGES
– privilèges accordés par CURRENT_USER, à CURRENT_USER, ou à PUBLIC

24/03/06 © Robert Godin. Tous droits réservés. 19

© Robert Godin. Tous droits réservés. 5


24/03/06

Recherche d ’une table du dictionnaire de données 6.2 Requêtes SQL


(SELECT)
 Syntaxe de requêteSQL

 Syntaxe du selectSQL

 ...

24/03/06 © Robert Godin. Tous droits réservés. 22

6.2.1 Projection d'une table


et la clause DISTINCT Clause DISTINCT
 Produire les noClient et dateCommande de toutes les Commandes  Produire les noClient et dateCommande de toutes les Commandes

Multi-ensemble !

π noClient, dateCommande (Commande)


24/03/06 © Robert Godin. Tous droits réservés. 23 24/03/06 © Robert Godin. Tous droits réservés. 24

© Robert Godin. Tous droits réservés. 6


24/03/06

6.2.2 Sélection sur une


Syntaxe de conditionSQL
table (WHERE)
 Sélectionner les Articles dont le prix est inférieur à
$20.00 et le numéro est supérieur à 30

 Syntaxe (incomplète) de la conditionSimple :

σ prixUnitaire < 20.00 ET noArticle > 30 (Article)


24/03/06 © Robert Godin. Tous droits réservés. 25 24/03/06 © Robert Godin. Tous droits réservés. 26

ConditionSQL - BETWEEN ConditionSQL - IN

 Sélectionner les Commandes du mois de juin de  Sélectionner les Commandes du Client dont le
l'année 2000 noClient est 10 ou 40 ou 80

24/03/06 © Robert Godin. Tous droits réservés. 27 24/03/06 © Robert Godin. Tous droits réservés. 28

© Robert Godin. Tous droits réservés. 7


24/03/06

ConditionSQL - LIKE ConditionSQL - IS NOT NULL

 Sélectionner les Clients dont le nomClient  Sélectionner les Articles dont la description
contient le mot Le n'est pas une valeur nulle

 2ième lettre du nomClient = o et dernière lettre


est un k

24/03/06 © Robert Godin. Tous droits réservés. 29 24/03/06 © Robert Godin. Tous droits réservés. 30

6.2.3 Sélection- 6.2.4 Produit cartésien


projection sur une table avec SELECT-FROM
 Produire les noClient et dateCommande des Commandes  Produire toutes les combinaisons possibles de
dont la date est supérieure au 05/07/2000 lignes de Client et de Commande...

Laboratoire
Créer le schéma de la BD
Client × Commande
PleinDeFoin :
SchemaVentesPleinDeFoin.sql
Exercices 1 a), b) , c) , n), o)

24/03/06 © Robert Godin. Tous droits réservés. 31 24/03/06 © Robert Godin. Tous droits réservés. 32

© Robert Godin. Tous droits réservés. 8


24/03/06

6.2.5 Jointure naturelle 6.2.6 Jointure avec


avec SELECT-FROM-WHERE JOIN (SQL2)
 Produire les informations au sujet des Clients et de leurs Commandes  Produire les informations au sujet des Clients et de leurs Commandes

Client  Commande

 Jointure-θ (si noms de colonnes de jointure sont différents)


π Client.noClient, nomClient, noTéléphone, noCommande, dateCommande
(σ Client.noCliente = Commande.noClient (Client × Commande))

24/03/06 © Robert Godin. Tous droits réservés. 33 24/03/06 © Robert Godin. Tous droits réservés. 34

6.2.8 Formulations équivalentes,


4.2.7 Jointure de plusieurs tables performance et indépendance des données

 Sélectionner les nomClient des Clients qui ont  ~Algèbre relationnelle


commandé au moins un plant d'herbe à puce

 Ordre quelconque des tables du FROM


– la plupart du temps…
π nomClient (σ description = “Herbe à puce ”  AND commutatif…
(Client  Commande  LigneCommande  Article))  Processus d ’évaluation de requête

24/03/06 © Robert Godin. Tous droits réservés. 35 24/03/06 © Robert Godin. Tous droits réservés. 36

© Robert Godin. Tous droits réservés. 9


24/03/06

6.2.9 Définition d'un


Auto-jointure
alias (clause AS)
 ~ renommer (ρ)  Quels sont les Clients qui ont le même numéro de téléphone?

π Client.noClient, Client2.noClient, (σ Client.noTéléphone = Client2.noTéléphone (Client × ρ Client2 (Client)))

π noClient, noClient2 (Client  ρ Client2(noClient2, nomClient2, noTéléphone) (Client))


Laboratoire
Exercices 1 d) e) f) h)

24/03/06 © Robert Godin. Tous droits réservés. 37 24/03/06 © Robert Godin. Tous droits réservés. 38

6.2.10 Jointure 6.2.11 Opérations ensemblistes


externe (OUTER JOIN) (UNION, INTERSECT, EXCEPT)
 Produire les informations au sujet des Clients et de leurs Commandes  Produire les noms et numéros de téléphone des Employés qui sont aussi des Clients de la pépinière

incluant les informations sur les Clients qui n’ont pas placé de Commande

Client =  Commande

 Oracle
– « + » après colonne pour inclure la valeur NULL

Laboratoire
Exercices 1 g) i) j)

24/03/06 © Robert Godin. Tous droits réservés. 39 24/03/06 © Robert Godin. Tous droits réservés. 40

© Robert Godin. Tous droits réservés. 10


24/03/06

6.2.12 Expressions
6.2.12 Expressions (suite)
générales sur les colonnes
 La liste des noArticle avec le prixUnitaire avant  Produire le détail de chacun des Articles commandés la
Commande #1 incluant le prix total avant et après la taxe de
et après inclusion de la taxe de 15% 15% pour chacun des Articles commandés

24/03/06 © Robert Godin. Tous droits réservés. 41 24/03/06 © Robert Godin. Tous droits réservés. 42

Expression sur colonne du


Opérateurs
WHERE
 Les Articles dont le prixUnitaire incluant la taxe
de 15% est inférieur à $16.00

 Conversions automatiques entre types


compatibles

24/03/06 © Robert Godin. Tous droits réservés. 43 24/03/06 © Robert Godin. Tous droits réservés. 44

© Robert Godin. Tous droits réservés. 11


24/03/06

Pseudo-colonnes Sélection par un CASE


Produire la quantité qui a été livrée pour l'Article #50 de la Commande #4
 Les Commandes de la journée 

24/03/06 © Robert Godin. Tous droits réservés. 45 24/03/06 © Robert Godin. Tous droits réservés. 46

6.2.13 Expressions et conditions


Quelques fonctions SQL2 sur les valeurs nulles (NULL)
 POSITION(patron IN chaîne)  Arithmétique
 CHARACTER_LENGTH(chaîne) – opérande NULL => NULL
 OCTET_LENGTH (chaîne)  Comparaison (>, <, …)
 BIT_LENGTH(chaîne)
– opérande NULL => UNKNOWN
 EXTRACT(champ FROM dateOuTime)
 SUBSTRING (chaîne FROM indiceDébut FOR nombreCaractères)
 UPPER | LOWER (chaîne)
 TRIM ([LEADING|TRAILING|BOTH] caractère FROM chaîne)
 CAST(expression AS type)
 …
 Voir documentation du SGBD

24/03/06 © Robert Godin. Tous droits réservés. 47 24/03/06 © Robert Godin. Tous droits réservés. 48

© Robert Godin. Tous droits réservés. 12


24/03/06

NULL pour les nuls ? 6.2.14 Fonctions de groupe

 Si x est NULL  Le nombre d'Articles différents à vendre ainsi


que le prixUnitaire moyen des Articles

– UNKNOWN OR UNKNOWN = UNKNOWN


 pas dans le résultat !

24/03/06 © Robert Godin. Tous droits réservés. 49 24/03/06 © Robert Godin. Tous droits réservés. 50

6.2.15 Partition d'une table


suite
avec la clause GROUP BY
 Produire le nombre de Commandes passées par chacun des
Clients qui ont passé au moins une Commande

24/03/06 © Robert Godin. Tous droits réservés. 51 24/03/06 © Robert Godin. Tous droits réservés. 52

© Robert Godin. Tous droits réservés. 13


24/03/06

Pour chacune des LigneCommande pour lesquelles au moins une


Livraison a été effectuée, produire le noCommande et noArticle, la
quantité totale livrée et le nombre de Livraisons effectuées
6.2.16 Clause HAVING
 Produire le nombre de Commandes passées par chacun des
Clients qui ont passé deux Commandes ou plus

24/03/06 © Robert Godin. Tous droits réservés. 53 24/03/06 © Robert Godin. Tous droits réservés. 54

Produire le nombre de Commandes passées par 6.2.17 Tri du résultat


chacun des Clients qui ont passé deux
Commandes ou plus après le 02/06/2000 (ORDER BY)
 Les Clients en ordre alphabétique du nom

Laboratoire
Exercices 1 q) s) t) v)

24/03/06 © Robert Godin. Tous droits réservés. 55 24/03/06 © Robert Godin. Tous droits réservés. 56

© Robert Godin. Tous droits réservés. 14


24/03/06

6.2.18 SELECT imbriqué


Ligne à plusieurs colonnes
6.2.18.1 Opération élément de (IN)

 Les Clients qui ont passé au moins une Commande  Chercher les LigneCommandes pour lesquelles
au moins une Livraison a été effectuée

Client > Commande

24/03/06 © Robert Godin. Tous droits réservés. 57 24/03/06 © Robert Godin. Tous droits réservés. 58

6.2.18.2 SELECT imbriqué


6.2.18.3 SELECT imbriqué corrélé
qui retourne une ligne
 Sélectionner les Commandes du Client Hugh Paycheck  Produire les informations au sujet des Clients qui ont
passé au moins une Commande
Référence à une
colonne non locale

 Exception si plusieurs lignes retournées par SELECT


imbriqué

24/03/06 © Robert Godin. Tous droits réservés. 59 24/03/06 © Robert Godin. Tous droits réservés. 60

© Robert Godin. Tous droits réservés. 15


24/03/06

6.2.18.4 Test d’ensemble 6.2.18.5 Test de double


vide (EXISTS) (UNIQUE)
 Produire les informations au sujet des Clients qui ont  Vérifier s'il y a plus d’un Client qui porte le même nom
passé au moins une Commande

 Clients qui ont passé au moins deux Commandes

24/03/06 © Robert Godin. Tous droits réservés. 61 24/03/06 © Robert Godin. Tous droits réservés. 62

6.2.18.6 Quantificateurs 6.2.18.7 Test d'inclusion


(ALL, SOME/ANY) entre deux tables et division
 Commandes passées après la dernière Livraison (date ultérieure)  T1 ⊆ T2

 Commandes passées après au moins une des Livraisons

24/03/06 © Robert Godin. Tous droits réservés. 63 24/03/06 © Robert Godin. Tous droits réservés. 64

© Robert Godin. Tous droits réservés. 16


24/03/06

Quelles sont les noCommande des Commandes qui 6.2.18.8 SELECT


incluent tous les Articles dont le prixUnitaire est $10.99
imbriqué dans le FROM
⊆  Produire les noClient et dateCommande des Commandes dont la
dateCommande est supérieure au 05/07/2000

Laboratoire
Exercices 2 a) b)
Lab
Exercices 1 e) f) j) k) p) u)
m)
24/03/06 © Robert Godin. Tous droits réservés. 65 24/03/06 © Robert Godin. Tous droits réservés. 66

6.2.19 Récursivité en 6.3 Opérations de mise à


SQL3 jour des tables en SQL

Insert
Delete
Update
24/03/06 © Robert Godin. Tous droits réservés. 67 24/03/06 © Robert Godin. Tous droits réservés. 68

© Robert Godin. Tous droits réservés. 17


24/03/06

6.3.1 Insertion dans une Insertion d ’une partie


table (INSERT) des colonnes
 Insérer une nouvelle ligne dans la table Client

 Changer l ’ordre de défaut

24/03/06 © Robert Godin. Tous droits réservés. 69 24/03/06 © Robert Godin. Tous droits réservés. 70

Insertion à partir d ’un 6.3.2 Suppression de


SELECT lignes (DELETE)
 Produire les lignes de DétailLivraison pour la  Supprimer toutes les lignes de la table Client
Livraison #106 à partir des LigneCommandes de
la Commande #7  Supprimer le Client #70 de la table Client

 Supprimer les Clients qui n'ont pas passé de Commande

24/03/06 © Robert Godin. Tous droits réservés. 71 24/03/06 © Robert Godin. Tous droits réservés. 72

© Robert Godin. Tous droits réservés. 18


24/03/06

6.3.3 Modification de 6.3.4 Gestion des


lignes (UPDATE) transactions en SQL
 Changer le noTéléphone du Client #10 pour (222)222-2222  COMMIT WORK
– confirme la transaction en cours
 ROLLBACK WORK
 Augmenter tous les prixUnitaires des Articles de 10% – annule la transaction en cours
 Début de transaction implicite
– début de session
 Modification de plusieurs colonnes à la fois
– fin de la précédente

Laboratoire
 Commande LDD provoque un COMMIT
Exercices 1 x) y) z)
24/03/06 © Robert Godin. Tous droits réservés. 73 24/03/06 © Robert Godin. Tous droits réservés. 74

6.4 Niveau externe du 6.4.1 Sécurité en SQL (GRANT)


schéma en SQL 6.4.1.1 Identification et authentification

 Gestion de la sécurité  Identification des utilisateurs


– GRANT – authorizationID
 PUBLIC : tous les utilisateurs
 Tables virtuelles
– VIEWS  Authentification
– mot de passe
– …
 Oracle
– SYS, SYSTEM
 CREATE USER authorizationID ...
24/03/06 © Robert Godin. Tous droits réservés. 75 24/03/06 © Robert Godin. Tous droits réservés. 76

© Robert Godin. Tous droits réservés. 19


24/03/06

6.4.1.2 Privilèges Exemples

 privilège :

 objet :

24/03/06 © Robert Godin. Tous droits réservés. 77 24/03/06 © Robert Godin. Tous droits réservés. 78

Privilèges (suite) 6.4.1.3 Suppression de privilèges

 Commandes LDD
– propriétaire du schéma
 Création d ’une VIEW sur T
– SELECT sur T
 FOREIGN KEY sur T
– privilège REFERENCES sur T
 ROLE
– ensemble de privilèges
– SQL3, Oracle

24/03/06 © Robert Godin. Tous droits réservés. 79 24/03/06 © Robert Godin. Tous droits réservés. 80

© Robert Godin. Tous droits réservés. 20


24/03/06

6.4.2 Table virtuelle 6.4.2.1 Implémentation


(VIEW) des tables virtuelles
 Résolution des vues par modification de requête

24/03/06 © Robert Godin. Tous droits réservés. 81 24/03/06 © Robert Godin. Tous droits réservés. 82

Résolution des vues par 6.4.2.2 Mise à jour de


matérialisation tables virtuelles
 Table stockée  Une seule table
– sans DISTINCT
 Redondance
– colonnes simples
 Maintenance de la cohérence – pas de SELECT imbriqué
 Meilleure performance du SELECT
 Moins bonne performance des mises à jour
 Entrepôts de données
24/03/06 © Robert Godin. Tous droits réservés. 83 24/03/06 © Robert Godin. Tous droits réservés. 84

© Robert Godin. Tous droits réservés. 21


24/03/06

Exemple de mise à jour par 6.4.2.3 Problèmes de mise à


modification de requête jour d'une table virtuelle

 Sémantique incohérente...
24/03/06 © Robert Godin. Tous droits réservés. 85 24/03/06 © Robert Godin. Tous droits réservés. 86

Rejet de mise à jour incohérente 6.4.2.4 Hiérarchie de


avec WITH CHECK OPTION tables virtuelles

24/03/06 © Robert Godin. Tous droits réservés. 87 24/03/06 © Robert Godin. Tous droits réservés. 88

© Robert Godin. Tous droits réservés. 22


24/03/06

6.4.2.5 Renommer les 6.4.2.6 Indépendance logique des


données et encapsulation par les
colonnes d'une VIEW tables virtuelles

 Catalogue (noArticle, description, prixUnitaire)


N.B. Modification interdite  Inventaire (noArticle, quantitéEnStock)

24/03/06 © Robert Godin. Tous droits réservés. 89 24/03/06 © Robert Godin. Tous droits réservés. 90

6.4.2.7 Sécurité par les


6.5 Schéma interne
tables virtuelles
 Non standardisé
– organisation primaire de la table
– organisations secondaires (INDEX)

 Voir Volume II

24/03/06 © Robert Godin. Tous droits réservés. 91 24/03/06 © Robert Godin. Tous droits réservés. 92

© Robert Godin. Tous droits réservés. 23


24/03/06

6.6 Interface entre SQL Librairie spécialisée (Call-


et un programme Level Interface - SQL/CLI)
 SQL incomplet  API spécifique au SGBD
– non portable
 Défaut d'impédance (impedance mismatch)
 Standard de facto ODBC
– modèle de données BD ≠
– développé par Microsoft pour le C
– modèle de données du langage de programmation – aligné sur X/Open, ISO CLI
– portable
– pilote ODBC pour client/serveur
– JDBC pour Java

 SQL3 : SQL/CLI
24/03/06 © Robert Godin. Tous droits réservés. 93 24/03/06 © Robert Godin. Tous droits réservés. 94

SQL enchâssé Extension procédurale à SQL


(Persistent Stored Modules -
(Embedded SQL) SQL/PSM)
 Code SQL dans le source du langage hôte  SQL +
 Syntaxe spéciale – structures de contrôle
 Pré-compilation – procédures, fonctions, packages
– Oracle : pro*C/C++, pro*COBOL, …, JSQL – support direct des types SQL pour les variables
– exécution au niveau serveur de BD
 Moins portable
– pré-compilateur spécifique au SGBD  Oracle
– traduit en API du SGBD – PL/SQL
 JSQL ->API standard JDBC

24/03/06 © Robert Godin. Tous droits réservés. 95 24/03/06 © Robert Godin. Tous droits réservés. 96

© Robert Godin. Tous droits réservés. 24


24/03/06

6.6.1 SQL enchâssé Variables partagées


 Syntaxe  Déclaration

 Insertion d'une ligne dans la table Client


 Utilisation de variables partagées

 Vérification d ’exceptions avec SQLSTATE

24/03/06 © Robert Godin. Tous droits réservés. 97 24/03/06 © Robert Godin. Tous droits réservés. 98

6.6.1.1 SELECT à ligne 6.6.1.2 Curseur SQL


unique

24/03/06 © Robert Godin. Tous droits réservés. 99 24/03/06 © Robert Godin. Tous droits réservés. 100

© Robert Godin. Tous droits réservés. 25


24/03/06

6.6.1.3 Mises à jour par curseur


6.6.1.4 SQL dynamique

24/03/06 © Robert Godin. Tous droits réservés. 101 24/03/06 © Robert Godin. Tous droits réservés. 102

6.6.2 Connexion 6.6.2 Connexion


(CONNECT) (CONNECT)
 Syntaxe du CONNECT

 Exemple avec SQL enchâssé en C

 Pour passer d ’un connexion à l ’autre

 Pour terminer une connexion

24/03/06 © Robert Godin. Tous droits réservés. 103 24/03/06 © Robert Godin. Tous droits réservés. 104

© Robert Godin. Tous droits réservés. 26


24/03/06

6.6.3.1 Architecture
6.6.3 JDBC
pour les pilotes JDBC
 API standard pour JAVA
 Ensemble de classes
 Besoin d ’installer un pilote JDBC dans
l ’environnement JAVA

24/03/06 © Robert Godin. Tous droits réservés. 105 24/03/06 © Robert Godin. Tous droits réservés. 106

6.6.3.4 Exécution d'une opération de


6.6.3.2 Etablissement mise à jour (INSERT, DELETE, UPDATE)

d'une connection
 Charger les pilotes JDBC d ’ Oracle

– N.B. La librairie des pilotes Oracle doit être accessible à la machine virtuelle
Java. Voir http://www.info.uqam.ca/~godin/livres.html
– Avec JDK 1.1 (problème avec bloc statique) utiliser :
 DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
 Établir une connexion avec le pilote OCI8 pour un serveur Oracle local
– OCI8 est un pilote de type 2

24/03/06 © Robert Godin. Tous droits réservés. 107 24/03/06 © Robert Godin. Tous droits réservés. 108

© Robert Godin. Tous droits réservés. 27


24/03/06

6.6.3.5 Exécution d'un 6.6.3.6 Gestion des


SELECT transactions
 Par défaut : auto-commit
 Pour modifier

 Pour un commit explicite :

 Pour un rollback :

24/03/06 © Robert Godin. Tous droits réservés. 109 24/03/06 © Robert Godin. Tous droits réservés. 110

ResultSet scrollable, 6.6.3.7 Gestion des


sensitive et updatable exceptions
sous JDBC 2.0

 Mécanisme try/catch de JAVA
 Paramètres à la création du Statement
– ex:uneConnection.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE)
 Scrollable
– first(), last(), beforeFirst(), afterLast(), next(), previous(), relative(n), absolute(n)
 Sensitive
– voit des mises à jour en cours
 Updatable
– updateXXX(), updateRow(), deleteRow(), insertRow(), moveToInsertRow()

24/03/06 © Robert Godin. Tous droits réservés. 111 24/03/06 © Robert Godin. Tous droits réservés. 112

© Robert Godin. Tous droits réservés. 28


24/03/06

Exemple d ’applette avec pilote JDBC type 4 (thin)

6.6.3.8 Compilation et exécutions


multiples avec la classe PreparedStatement

 Compilation + exécution combinée au executeQuery

 Compilation au prepareStatement

 Compilation avec paramètres

24/03/06 © Robert Godin. Tous droits réservés. 114

Chercher le nomClient et
Considérations client/serveur
noTéléphone d ’un Client
 Coût important de communication  Eviter :
 Limiter le nombre d ’appels au serveur de BD
 Solutions
– combiner plusieurs opérations SQL en une
 si possible
– combiner plusieurs opérations dans une procédure/fonction (stored)
exécutée au niveau serveur
 extension procédurale (SQL/PSM, Oracle PL/SQL)
 support d ’un langage hôte (JAVA, C , C++, COBOL,…)  Utiliser plutôt :
 JDBC 2.0
– Statement peut contenir un lot d ’énoncés (batch update)
 unEnoncé.addBatch(), unEnoncé.executeBatch()

24/03/06 © Robert Godin. Tous droits réservés. 115 24/03/06 © Robert Godin. Tous droits réservés. 116

© Robert Godin. Tous droits réservés. 29