You are on page 1of 50

Bases de données relationnelles

sous Oracle

SQL POUR ORACLE

Préparé par : M. Karim ELATRACH


Plan du cours

 Présentation des SGBDR

 Le SGBDR Oracle

 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)

2
Présentation des SGBDR
Bases de données
 Une base de données est un ensemble de
données :
 représentant une partie du monde réel
 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

4
Bases de données
Une collection de données est appelée base de
données si:
 format connu (défini au niveau du système et non
uniquement au niveau des programmes utilisant les
données) et défini par des méta-données
(données décrivant des données)
 Données stockées, recherchées, modifiées
uniquement par un type spécial de programmes
appelé système de gestion de bases de
données
 Données manipulées sous le contrôle de
transactions (ensemble de règles formelles
assurant l’intégrité des données
5
Système de gestion de
bases de données (SGBD)
Un SGBD est un ensemble de logiciels-système
permettant aux utilisateurs de:
 mettre en forme
 sauvegarder,
 mettre à jour (modifier, insérer, supprimer)
 rechercher
efficacement des données spécifique dans une
très grande masse d’informations partagées
entre plusieurs utilisateurs

6
Fonctionnalités d’un SGBD (1)
 Contrôler la redondance d'informations
 Partage des données
 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

7
Fonctionnalités d’un SGBD (2)
 Sécurité d’accès
 commandes d’autorisation
 Partage et accès concurrents
 techniques de verrouillage
 Interrogation : langages de requêtes
 déclaratifs et incomplets
→ intégration du langage de requête et d’un langage
de programmation
→ dysfonctionnements (typage et traitement
ensembliste)

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

10
Généralités (2/3)

 Intégrité
 Définition des contraintes d’intégrité du modèle relationnel
 Confidentialité
 Privilège
 Rôle : ensemble de privilèges pouvant être attribués à un groupe
d’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 une
unité de traitement
 Plusieurs utilisateurs peuvent accéder aux mêmes données
simultanément
11
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 :
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, Windows


98/NT/2000/XP, etc.
Depuis la version 8.0.5, Oracle est disponible sous linux

 Indépendance des données et des applications vis-à-vis de


l’environnement matériel et logiciel

12
Architecture d’Oracle

Outils Produits d’intégration


d’interconnexion d’outils
SQL*Net (Oracle Net) Oracle for 1-2-3
SQL*Connect Oracle for DBase

Utilitaires PL/SQL
d’administration Outils de
SQL développement
SQL*DBA d’applications
SQL*Loader Dictionnaire SQL*Plus
Import/Export
Developer 2000
Noyau Précompilateurs
Outils décisionnels (SQL*xxx)
de données
Easy*SQL
SQL*Calc
Oracle for 1-2-3

Couches de base d’Oracle


13
Architecture d’Oracle

Oracle est un environnement complet

14
Architecture d’Oracle
Noyau

 Le noyau assure les fonctionnalités d’un SGBD qui


sont essentiellement les suivantes :
Fonctions classiques
− 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

15
Architecture d’Oracle
Dictionnaire de données

 C’est une base de données qui décrit de façon


dynamique une base de de données. Son contenu
reflète l’image de la base à un instant donné.
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

16
Architecture d’Oracle
Couche 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

Rôle de cette couche :


− 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
− Récupération du résultat et le transmettre à l’application qui a
soumis la commande

17
Architecture d’Oracle
Couche PL/SQL

Extension de la couche SQL

PL/SQL = SQL+ Structures de contrôle + Variables + Traitement


des erreurs + Traitement des curseurs

18
Outils d’Oracle
Outils de développement d’applications

Outils de 4ème génération

3 outils de développement :

− SQL*Plus : interface interactive à SQL et PL/SQL

− Developer 2000 : conception et création d’application client-


serveur

− SQL*xxx : précompilateurs

19
Outils d’Oracle
Outils de développement d’applications
SQL*Plus

20
Outils d’Oracle
Outils 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ées


sur des formulaires.

Oracle Reports : utilisé pour concevoir des états

Oracle Graphics : permet de définir des requêtes qui lorsqu’elles sont


exécutées, génèrent des graphiques dynamiques

Procedure Builder : utilisé pour concevoir et gérer le code PL/SQL sur un


serveur de bases de données

21
Outils d’Oracle
Outils de développement d’applications
Précompilateurs

 Oracle dispose d’une variété d’interfaces de programmation


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

Code C Librairie
Code C & SQL Précompilateur & fonctions Oracle

Compilateur C

Exécutable

22
Outils d’Oracle
Outils d’administration

Ensembles d’outils et d’utilitaires d’administration de la base de


données

3 outils d’administration :

− SQL* DBA : outil de base de l’administrateur

− SQL*Loader : outil de chargement de données à partir des


fichiers externes

− Import/Export : outils d’importation et d’exportation de


données entre les bases de données Oracle

23
Outils d’Oracle
Outils d’administration
SQL*DBA

Permet d’effectuer les opérations suivantes :


− Démarrage et arrêt d’une instance

− 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

24
Outils d’Oracle
Outils d’administration
SQL*Loader & Import/Export

SQL*Loader permet d’alimenter des tables d’une


base de données Oracle par des données qui
proviennent de fichiers non Oracle

Import/Export permettent d’échanger des


données entre les bases de données Oracle

25
LE LANGAGE SQL

Langage d’Interrogation de Données (LID)


Interrogation des données
(syntaxe partielle)
Syntaxe partielle de l’interrogation
SELECT <liste d'attributs dont on cherche la valeur>
FROM <liste de relations dont on fait le produit>
[ WHERE <condition de sélection> ]

27
Syntaxe complète de
l’interrogation
SELECT {[ALL | DISTINCT] <colonne et/ou calculs> [AS <alias>]}
|*
FROM <table1 [var1], table2 [var2] …>
[WHERE < condition de sélection >]
[GROUP BY <colonne1 , colonne2…>
[HAVING <critères_regroupement>] ]
[{UNION | INTERSECT | MINUS} (SELECT …)]
[ORDER BY <colonne1 [ASC | DESC], …>]

28
Ligne SELECT
SELECT {[ALL | DISTINCT] <colonne et/ou calculs> [AS <alias>]} | *

 ALL : sans élimination des doublons (mode par défaut)


 DISTINCT : avec élimination des doublons

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

29
Ligne SELECT
SELECT {[ALL | DISTINCT] <colonne et/ou calculs> [AS
<alias>]} | *
calcul :
 soit expression sur des colonnes avec des opérateurs : +, -, *, /
éventuellement avec (), ou || (concaténation de chaînes de
caractères)
 soit des fonctions simples sur une valeur ou agrégats sur un
ensemble de valeurs (ex: SUM (somme), AVG (moyenne) des
valeurs d‘une colonne, COUNT (compte les n-uplets))
 soit la combinaison des expressions, fonctions simples et
agrégats (ex: MIN, MAX d‘une expression sur des colonnes)
alias : si mentionné, alias est le nom de la colonne dans le
résultat de la requête.
30
Ligne FROM
FROM <table1 [var1], table2 [var2] …>

table1 :
 soit un nom de table,
 soit un nom de table préfixé du compte du
propriétaire
var1 : variable (alias) attribuée à table1 durant
la requête
31
Ligne WHERE (Optionnelle)
[WHERE <condition de sélection>]

condition : expression logique de prédicats


 colonne comparateur { valeur | colonne | sous-requête}
où le comparateur est l’un des suivants :
=, !=, >, <, >=, <=, 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

32
Ligne GROUP BY (Optionnelle)
[GROUP BY <colonne1 , colonne2…>
[HAVING <critères_regroupement>] ]
 colonnes : attributs de regroupement
 objectif : partitioner horizontalement la relation
selon les valeurs de certaines colonnes, appliquer
ensuite 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}
33
Opérations ensemblistes
 UNION : effectue l’union des n-uplets de deux relations

 INTERSECT : effectue l’intersection des n-uplets de deux


relations

 MINUS : effectue la différence ensembliste entre deux


relations

Remarque : les attributs des lignes SELECT doivent être les


mêmes pour pouvoir appliquer ces opérations entre deux
requêtes

34
Ligne ORDER BY (optionnelle)
[ORDER BY <colonne1 [ASC | DESC], …>]

ordonne le résultat de la requête dans l’ordre croissant


(ASC) ou décroissant (DESC) des valeurs de la
colonne1…

35
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:
 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.
37
Exemple INSERT
 INSERT INTO dept (dept_no, name,
adrs_id)
VALUES (12, ’INFORMATIQUE’, 200);
 Ou : INSERT INTO dept
VALUES (12, ’INFORMATIQUE’, 200);

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

39
Exemple UPDATE
 UPDATE emp
SET last_name = ’DOE’,
first_name = ’JOHN’
WHERE dept_no = 30;

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

41
Exemple DELETE
 DELETE FROM addresses
WHERE adrs_id = (SELECT e.adrs_id
FROM emp e
WHERE e.last_name = ’DOE’ AND e.first_name = ’JOHN’);
 DELETE FROM emp e
WHERE e.last_name = ’DOE’ AND e.first_name = ’JOHN’
 DELETE FROM dept
WHERE adrs_id is null;
 Remarque : Une opération de suppression est permanente ! Une
fois 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 de
commande undo.

42
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]
[données provenant d’une requête]

 Définition d’une colonne :


Elément de colonne ::= nom type [DEFAULT
expression] [contrainte de colonne]….

44
Création de table (2)
 Contrainte de colonne ::=
[CONSTRAINT contrainte]
{ [NOT] NULL | {UNIQUE | PRIMARY KEY}
REFERENCES table [(colonne)] [ON DELETE CASCADE]
|CHECK (condition)}
{ [USING INDEXUSING [PCTFREE entier] [INITTRANS entier]
[TABLESPACE tablespace]
[STORAGE clause_storage]] [EXCEPTION INTO table | DISABLE}

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

 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.

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

47
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
(
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)
);

48
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


(
idarticle NUMBER CONSTRAINT c_idr PRIMARY KEY,
designation CHAR(20) CONSTRAINT nn_des NOT NULL,
prixunit NUMBER(7,2)
qtestock NUMBER DEFAULT 0
);

49
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 numcom et nuligne.
 CREATE TABLE ligne_com
(
numcom NUMBER
nuligne NUMBER
idarticle NUMBER CONSTRAINT fk_ida REFERENCES
article(idarticle),
qtecom NUMBER CONSTRAINT nn_qte NOT NULL
CONSTRAINT check_qte CHECK (qtecom>0),
PRIMARY KEY (numcom, nuligne)
);
50

You might also like