01 sql pour oracle
TRANSCRIPT
Bases de données relationnelles sous Oracle
SQL POUR ORACLE
Préparé par : M. Karim ELATRACH
Plan du cours
� Le SGBDR Oracle
� Présentation des SGBDR
2
� SQL : Langage d’Interrogation de Données (LID)
� SQL : Langage de Manipulation de données (LMD)
� SQL : Langage de Définition de données (LDD)
Présentation des SGBDR
Bases de données
� Une base de données est un ensemble dedonnées :� représentant une partie du monde réel
stockées en mémoire secondaire
4
� stockées en mémoire secondaire
� pouvant être interrogées et mises à jour
� servant de support à une ou plusieurs applications
� Mais… base de données ≠ banque de données
Bases de données
Une collection de données est appelée base dedonnées si:� format connu (défini au niveau du système et nonuniquement au niveau des programmes utilisant les
5
uniquement au niveau des programmes utilisant lesdonnées) et défini par des méta-données(données décrivant des données)
� Données stockées, recherchées, modifiéesuniquement par un type spécial de programmesappelé système de gestion de bases dedonnées
� Données manipulées sous le contrôle detransactions (ensemble de règles formellesassurant l’intégrité des données
Système de gestion de bases de données (SGBD)
Un SGBD est un ensemble de logiciels-systèmepermettant aux utilisateurs de:� mettre en forme
sauvegarder,
6
� sauvegarder,
� mettre à jour (modifier, insérer, supprimer)
� rechercher
efficacement des données spécifique dans unetrès grande masse d’informations partagéesentre plusieurs utilisateurs
Fonctionnalités d’un SGBD (1)
� Contrôler la redondance d'informations
� Partage des données
� Fiabilité des données
7
� Fiabilité des données� Cohérence et contraintes d’intégrité
� Sûreté du fonctionnement� Notion de transaction atomique
� Techniques de sauvegarde et/ou de journalisation
� Procédures de reprise sur panne
Fonctionnalités d’un SGBD (2)
� Sécurité d’accès� commandes d’autorisation
� Partage et accès concurrentstechniques de verrouillage
8
� techniques de verrouillage
� Interrogation : langages de requêtes� déclaratifs et incomplets
→ intégration du langage de requête et d’un langagede programmation
→ dysfonctionnements (typage et traitementensembliste)
Le SGBDR Oracle
Généralités (1/3)
� Oracle est un SGBD relationnel developpé par la société « Oracle Corporation »
� 1ère version : 1981
Version de travail Oracle 9i (Enterprise/Standard/Personal
10
� Version de travail Oracle 9i (Enterprise/Standard/Personal Edition)
� Définition et manipulation des données
� Langage SQL
� Langage PL/SQL (extension procédurale du langage SQL)
� Procédure stockées
� Déclencheurs (trigger)
Généralités (2/3)
� Intégrité
� Définition des contraintes d’intégrité du modèle relationnel
� Confidentialité
� Privilège
11
� Privilège
� Rôle : ensemble de privilèges pouvant être attribués à un grouped’utilisateurs
� Vue
� Concurrence d’accès
� Verrouillage = mode de réservation qui consiste à interdire l’accèsà une partie de données pendant que celle-ci est utilisée par uneunité de traitement
���� Plusieurs utilisateurs peuvent accéder aux mêmes donnéessimultanément
Généralités (3/3)
� Oracle est un SGBD à architecture ouverte
� Portabilité d’Oracle :
Oracle est écrit en langage C ���� disponible sur plusieurs plates-formes matérielles et logicielles :
12
formes matérielles et logicielles :
���� Indépendance des données et des applications vis-à-vis del’environnement matériel et logiciel
o Plates-formes matérielles : du mainframes (IBM et les autres)jusqu’au micro-ordinateur (PC, Macintosh)
o Systèmes d’exploitation : Unix, VMS, DOS, Windows98/NT/2000/XP, etc.
Depuis la version 8.0.5, Oracle est disponible sous linux
PL/SQL
Architecture d’Oracle
Utilitaires
Outils d’interconnexion
SQL*Net (Oracle Net)
SQL*Connect
Produits d’intégration d’outils
Oracle for 1-2-3
Oracle for DBase
13
PL/SQL
SQL
Noyau
Dictionnaire
de données
NoyauOutils décisionnels
Easy*SQL
SQL*Calc
Oracle for 1-2-3
Utilitaires d’administration
SQL*DBA
SQL*Loader
Import/Export
Outils de développement d’applications
SQL*Plus
Developer 2000
Précompilateurs (SQL*xxx)
Couches de base d’Oracle
Architecture d’Oracle
14
Oracle est un environnement complet
Architecture d’OracleNoyau
� Le noyau assure les fonctionnalités d’un SGBD quisont essentiellement les suivantes :
Fonctions classiques
− Gestion de l’intégrité et de la cohérence des données
15
− Gestion de l’intégrité et de la cohérence des données
− Gestion de la confidentialité des données
− Gestion de sauvegarde et de restauration
− Gestion des accès concurrents
Fonctions particulières
− Optimisation de l’exécution des requêtes
− Gestion des accélérateurs
− Stockage physique des données
Architecture d’OracleDictionnaire de données
� C’est une base de données qui décrit de façondynamique une base de de données. Son contenureflète l’image de la base à un instant donné.
Il décrit
16
Il décrit− Les objets de la base de données (tables, colonnes, vues,
index, clusters, …)
− Les utilisateurs accèdent à Oracle avec leurs privilèges et les droits qu’ils ont sur les différents objets.
− Les informations relatives à l’activité de la base de données (connexions, ressources utilisées, etc.)
Le dictionnaire de données est manipulé avec le langage SQL
Architecture d’OracleCouche SQL
Elle joue le rôle d’interface entre le noyau et les différents
outils d’Oracle
Tout accès à la base de données est exprimé en SQL
17
− Interprétation des commandes SQL
− Vérification syntaxique et sémantique
− Décomposer les commandes en opérations élémentaires et les soumettre au noyau
Tout accès à la base de données est exprimé en SQL
Rôle de cette couche :
− Récupération du résultat et le transmettre à l’application qui a soumis la commande
Architecture d’OracleCouche PL/SQL
Extension de la couche SQL
18
PL/SQL = SQL+ Structures de contrôle + Variables + Traitement
des erreurs + Traitement des curseurs
Outils d’OracleOutils de développement d’applications
Outils de 4ème génération
3 outils de développement :
19
− SQL*Plus : interface interactive à SQL et PL/SQL
− Developer 2000 : conception et création d’application client-serveur
− SQL*xxx : précompilateurs
Outils d’OracleOutils de développement d’applications
SQL*Plus
20
Outils d’OracleOutils de développement d’applications
Developer 2000
Developer 2000 dispose de 4 outils principaux :
Oracle Forms : utilisé pour concevoir et générer des applications baséessur des formulaires.
21
sur des formulaires.
Oracle Reports : utilisé pour concevoir des états
Oracle Graphics : permet de définir des requêtes qui lorsqu’elles sontexécutées, génèrent des graphiques dynamiques
Procedure Builder : utilisé pour concevoir et gérer le code PL/SQL sur unserveur de bases de données
Outils d’OracleOutils de développement d’applications
Précompilateurs
� Oracle dispose d’une variété d’interfaces de programmationpermettant d’accèder, depuis des langages de 3ème génération(C, Ada, Cobol, Pascal) aux données générées par Oracle.
LibrairieCode C
22
Code C & SQLLibrairieOraclePrécompilateur
Code C & fonctions
Compilateur C
Exécutable
Outils d’OracleOutils d’administration
Ensembles d’outils et d’utilitaires d’administration de la base dedonnées
3 outils d’administration :
23
3 outils d’administration :
− SQL* DBA : outil de base de l’administrateur
− SQL*Loader : outil de chargement de données à partir desfichiers externes
− Import/Export : outils d’importation et d’exportation dedonnées entre les bases de données Oracle
Outils d’OracleOutils d’administration
SQL*DBA
Permet d’effectuer les opérations suivantes :
− Démarrage et arrêt d’une instance
24
− Chargement et déchargement d’une base de données
− Ouverture et fermeture d’une base de données
− Pilotage en temps réel du fonctionnement d’Oracle
− Sauvegarde et restauration des données et des journaux
Outils d’OracleOutils d’administration
SQL*Loader & Import/Export
SQL*Loader permet d’alimenter des tables d’unebase de données Oracle par des données qui
25
base de données Oracle par des données quiproviennent de fichiers non Oracle
Import/Export permettent d’échanger desdonnées entre les bases de données Oracle
LE LANGAGE SQL
Langage d’Interrogation de Données (LID)
Interrogation des données (syntaxe partielle)
Syntaxe partielle de l’interrogationSELECT <liste d'attributs dont on cherche la valeur>FROM <listederelationsdonton fait le produit>
27
FROM <listederelationsdonton fait le produit>[ WHERE <condition de sélection> ]
Syntaxe complète de l’interrogation
SELECT {[ ALL | DISTINCT ] <colonne et/ou calculs> [AS <alias>]}| *
FROM <table1 [var1], table2 [var2] …>
[WHERE < conditiondesélection>]
28
[WHERE < conditiondesélection>]
[GROUP BY <colonne1 , colonne2…>
[HAVING <critères_regroupement>] ]
[{ UNION | INTERSECT | MINUS } ( SELECT …)]
[ORDER BY <colonne1[ASC | DESC], …>]
Ligne SELECTSELECT {[ ALL | DISTINCT ] <colonne et/ou calculs> [AS <alias>]} | *
� ALL : sans élimination des doublons (mode par défaut)� DISTINCT : avecéliminationdesdoublons
29
� DISTINCT : avecéliminationdesdoublons
� colonne :� soit nom_att (si pas d'ambiguïté sur ce nom),� soit nom_table.nom_att,� soit var_table.nom_att,� soit * (toutes les colonnes),� soit nom_tab.*� soit var_tab.*
Ligne SELECTSELECT {[ ALL | DISTINCT ] <colonne et/ou calculs> [AS
<alias>]} | *
calcul :� soit expressionsurdescolonnesavecdesopérateurs: +, -, *, /
30
soit expressionsurdescolonnesavecdesopérateurs: +, -, *, /éventuellement avec (), ou || (concaténation de chaînes decaractères)
� soit des fonctions simples sur une valeur ou agrégats sur unensemble de valeurs (ex: SUM(somme), AVG(moyenne) desvaleurs d‘une colonne, COUNT (compte les n-uplets))
� soit la combinaison des expressions, fonctions simples etagrégats (ex: MIN, MAXd‘une expression sur des colonnes)
alias : si mentionné, alias est le nomde la colonne dans lerésultat de la requête.
Ligne FROM
FROM <table1 [var1], table2 [var2] …>
table1 :
31
table1 :� soit un nomde table,
� soit un nom de table préfixé du compte dupropriétaire
var1 : variable (alias) attribuée à table1 durantla requête
Ligne WHERE (Optionnelle)[WHERE <condition de sélection>]
condition : expression logique de prédicats� colonne comparateur { valeur | colonne | sous-requête}
où le comparateurestl’un dessuivants:
32
où le comparateurestl’un dessuivants:=, !=, >, <, >=, <=, LIKE, {>|<|…} {ALL| ANY}
� colonne {IN | NOT IN} { (valeur1, valeur2,…) | sous-requête}� colonne BETWEEN valeur1 AND valeur2� {EXISTS | NOT EXISTS} sous_requête� colonne IS NULL� condition {AND|OR} condition,� NOT condition
Ligne GROUP BY (Optionnelle)[GROUP BY <colonne1 , colonne2…>[HAVING <critères_regroupement>] ]
� colonnes : attributs de regroupement� objectif : partitioner horizontalementla relation
33
� objectif : partitioner horizontalementla relationselon les valeurs de certaines colonnes, appliquerensuite une fonction agrégat (sur d'autres colonnes)aux partitions
• Ligne HAVING (Optionnelle après regroupement)critère_regroupement :fonction_agrégat([DISTINCT] colonne)comparateur {valeur |sous-requête}
Opérations ensemblistes
� UNION : effectue l’union des n-uplets de deux relations
� INTERSECT : effectue l’intersection des n-uplets de deuxrelations
34
relations
� MINUS : effectue la différence ensembliste entre deuxrelations
Remarque : les attributs des lignes SELECT doivent être lesmêmes pour pouvoir appliquer ces opérations entre deux
requêtes
Ligne ORDER BY (optionnelle)
[ORDER BY <colonne1[ASC | DESC], …>]
ordonne le résultat de la requête dans l’ordre croissant
35
ordonne le résultat de la requête dans l’ordre croissant
(ASC) ou décroissant (DESC) des valeurs de la colonne1…
LE LANGAGE SQL
Langage de Manipulation de données (LMD)
INSERT� L’instruction INSERT est utilisée pour ajouter de nouvelles lignes dans la
base de données.� La syntaxe de INSERT est:
� INSERT INTO schema.table column(s) VALUES subquery� Avec:
37
� schema est un paramètre optionnel pour identifier le schéma de base de donnée utilisé pour l’insertion. Par défaut, c’est le schéma de l’utilisateur.
� table est obligatoire et est le nom de la table.� column est la liste des colonnes qui vont recevoir les valeurs
insérées.� VALUES est utilisé lorsqu’une ligne de données est insérée. Les
valeurs sont représentées comme des constantes.� subquery est utilisé lorsque l’option VALUES n’est pas utilisée. Les
colonnes de la sous-requête doivent correspondre à l’ordre et aux types des données des colonnes dans la liste de la commande INSERT.
Exemple INSERT
� INSERT INTO dept (dept_no, name, adrs_id)VALUES (12, ’INFORMATIQUE’, 200);
38
VALUES (12, ’INFORMATIQUE’, 200);� Ou : INSERT INTO dept
VALUES (12, ’INFORMATIQUE’, 200);
UPDATE� L’instruction UPDATE est utilisée pour changer des lignes existantes dans
la base de données. � La syntaxe de l’instruction UPDATE est
� UPDATE schema.table SET column(s) = expr sub query WHERE condition
� Avec:� schema est un paramètre optionnel pour identifier le schéma de base de
39
� schema est un paramètre optionnel pour identifier le schéma de base de données utilisé pour la mise à jour. Par défaut, il s’agit du schéma de l’utilisateur.
� table est obligatoire et est le nom de la table.� SET est un mot clé obligatoire réservé.� column est une liste de colonnes qui vont recevoir les valeurs mises à jour.� expr est la nouvelle valeur à affecter.� sub query est une instruction SELECT qui va extraire les nouvelles valeurs des
données.� WHERE est optionnel et est utilisé pour restreindre les lignes qui vont être mises
à jour.
Exemple UPDATE
� UPDATE emp
SET last_name = ’DOE’,
first_name = ’JOHN’
40
first_name = ’JOHN’
WHERE dept_no = 30;
DELETE
� L’instruction DELETE est utilisée pour retirer des lignes de la base de données.
� La syntaxe de DELETE est :� DELETE FROM schema.table WHERE condition
41
� DELETE FROM schema.table WHERE condition� Avec:� SCHEMA est un paramètre optionnel pour identifier
le schéma de base de donnée utilisé pour le DELETE. Par défaut il s’agit du schéma de l’utilisateur.
� TABLE est obligatoire et est le nom de la table.� WHERE restreint l’opération DELETE.
Exemple DELETE� DELETE FROM addresses
WHERE adrs_id = (SELECT e.adrs_idFROM emp eWHERE e.last_name = ’DOE’ AND e.first_name = ’JOHN’);DELETE FROM emp e
42
� DELETE FROM emp eWHERE e.last_name = ’DOE’ AND e.first_name = ’JOHN’
� DELETE FROM deptWHERE adrs_id is null;
� Remarque : Une opération de suppression est permanente ! Unefois faite, il est Impossible de récupérer la ou les ligne(s)autrement que par une opération INSERT. Il n’y a pas decommande undo.
LE LANGAGE SQL
Langage de Définition de données (LDD)
Création de table (1)
� CREATE TABLE nom (définition d’une colonne | définition d’une contrainte ….)[ spécification de stockage ][définition de cluster]
44
[définition de cluster][données provenant d’une requête]
� Définition d’une colonne :Elément de colonne ::= nom type [DEFAULT expression] [contrainte de colonne]….
Création de table (2)� Contrainte de colonne ::=
[CONSTRAINT contrainte]
{ [NOT] NULL | {UNIQUE | PRIMARY KEY}
REFERENCES table [(colonne)] [ON DELETE CASCADE]
45
|CHECK (condition)}
{ [USING INDEXUSING [PCTFREE entier] [INITTRANS entier]
[TABLESPACE tablespace]
[STORAGE clause_storage]] [EXCEPTION INTO table | DISABLE}
Création de table (3)� CONSTRAINT sert à attribuer un nom à la contrainte à définir qui sera
sauvegardé dans le dictionnaire de données
� NULL spécifie que la colonne peut contenir des valeurs nulles.
46
� UNIQUE interdit d’avoir deux lignes ayant la même valeur pour cette colonne.
� PRIMARY KEY spécifie que la colonne est utilisée comme clé primaire. Même effet que UNIQUE sauf qu’elle n’accepte pas les valeurs nulles.
� REFERENCES définit une contrainte d’intégrité référentielle par rapport à une clé primaire ou unique.
Création de table (4)� Contrainte d’intégrité d’une table ::=
[CONSTRAINT contrainte]{ UNIQUE | PRIMARY KEY} (colonne [,colonne]…)| FOREIGN KEY (colonne, [colonne]…)REFERENCES table [(colonne)] [ON DELETE CASCADE]
47
REFERENCES table [(colonne)] [ON DELETE CASCADE]| CHECK (condition)}{ [USING INDEXUSING [PCTFREE entier] [INITTRANS entier] [TABLESPACE tablespace][STORAGE clause_storage]] [EXCEPTION INTO table | DISABLE}
FOREIGN KEY désigne une ou plusieurs colonnes comme une clé étrangère dans une contrainte d’intégrité référentielle.
Création de table (5)� 1- La table Client définit une clé primaire sur la colonne idclient, une
contrainte NOT NULL sur la colonne nom et une contrainte CHECK sur la colonne codepost.
� CREATE TABLE client (
48
(idclient NUMBER CONSTRAINT u_id PRIMARY KEY,nom CHAR(20) CONSTRAINT nn_nom NOT NULL,adresse CHAR(80),codepost NUMBER(5) CHECK (codepost BETWEEN
10000 AND 95999),ville CHAR(20),tel NUMBER(8)
);
Création de table (6)
� 2- La table article définit deux contraintes PRIMARY KEY et NOT NULL resp sur les colonnes idarticle et designation. Elle affecte une valeur par défaut égale à 0 pour la colonne qtestock.
CREATE TABLE article
49
� CREATE TABLE article
(
idarticle NUMBER CONSTRAINT c_idr PRIMARY KEY,
designation CHAR(20) CONSTRAINT nn_des NOT NULL,
prixunit NUMBER(7,2)
qtestock NUMBER DEFAULT 0
);
Création de table (7)� 2- Création d’une table ligne de commande nommée ligne_com en définissant les
contraintes d’intégrité suivante:� Une clé étrangère sur la colonne idarticle qui se réfère à idarticle de la table article.� Deux contraintes sur la colonne qtecom. La première n’autorise pas la saisie des valeurs
nulles et la seconde contrôle que la valeur saisie doit être supérieure à 0.� Une clé primaire composée des deux colonnes numcomet nuligne.
50
Une clé primaire composée des deux colonnes numcomet nuligne.
� CREATE TABLE ligne_com(
numcom NUMBERnuligne NUMBERidarticle NUMBER CONSTRAINT fk_ida REFERENCES
article(idarticle),qtecom NUMBER CONSTRAINT nn_qte NOT NULLCONSTRAINT check_qte CHECK (qtecom>0),PRIMARY KEY (numcom, nuligne)
);