Académique Documents
Professionnel Documents
Culture Documents
1
Objectifs
Fonctions SQL
Fonctions « caractères»
Fonctions « numériques»
Fonctions « dates»
Conversion de données
implicite
explicite
2
Fonction
Une fonction est un ensemble d'instructions
prenant de 0 à N arguments et retournant un
résultat
Argument 1
FONCTION Résultat
Argument 2
Argument 3
3
Fonction « caractères »
LOWER mettre en minuscule
UPPER mettre en majuscule
INITCAP mettre les 1ères lettres en majuscule
CONCAT fonction de concaténation (idem ||)
SUBSTR extraction d'une sous-chaîne
LENGTH calcul du nombre de caractères
INSTR position d'une chaîne recherchée dans une autre
LPAD ajouter des caractères à gauche pour justifier
RPAD ajouter des caractères à droite pour justifier
4
Exemples
LOWER('ORACLE SQl')
oracle sql
UPPER('Oracle Sql')
ORACLESQL
INITCAP('ORACLE sql')
Oracle Sql
Afficher les noms des employés avec la 1ère lettre
en majuscule: SQL> SELECT INITCAP(ename) AS "Nom"
2 FROM emp;
5
Exemples
CONCAT('GOOD', 'STRING‘)
GOODSTRING
SUBSTR('String', 1, 3)
Str
LENGTH('String')
6
INSTR('String', 'r')
3
LPAD(sal, 10, '*')
******5000
6
Fonction « numériques »
ROUND arrondir un nombre décimal
ROUND(45.926, 2) =45.93
TRUNC tronquer un nombre décimal
TRUNC(45.926, 2) =45.92
MOD calculer le reste de la division entière
MOO(1600,300) =100
7
Fonction « dates »
SYSDATE retourne la date courante du système
MONTH_BETWEEN retourne le nombre de mois entre
2 dates
ADD_MONTH ajouter un nombre de mois à une date
NEXT_DAY retourne la date suivante selon un format
LAST_DAY retourne la date du dernier jour du mois
ROUND arrondir une date selon le format précisé
TRUNC tronquer une date selon le format précisé
8
Exemples
MONTHS_BETWEEN(' 01-SEP-95', '11-JAN-94 ')
19.6774194
+ADD_MONTHS(' 11-JAN-94', 6)
‘11-JUL-94’
NEXT_DAY(' 01-SEP-95', , FRIDAY')
‘08-SEPT-95’
LAST_DAY(' 01-SEP-95')
‘30-SEPT-95’
9
Exemples
ROUND(' 25-JUL-95 ‘, 'MONTH‘)
‘01-AUG-95’
ROUND(' 25-JUL-95 ‘, 'YEAR')
‘01-JAN-96’
TRUNC(' 25-JUL-95 ‘, 'MONTH')
‘01-JUL-95’
TRUNC(' 25-JUL-95 ‘, 'YEAR')
‘01-JAN-95’
10
Types de données
NUMBER
VARCHAR2
CHAR
DATE
Autres ...
11
NUMBER
Nombre virgule flottante (maximum 38 chiffres)
1E-130 •• l0E125
possibilité de déclarer une précision p (nombre de
chiffres significatifs) et une échelle s (scale = nombre de
décimales après le séparateur décimal)
précision et échelle introduisent une contrainte
échelle (de -84 à 127) ==> arrondi (ex: s =2, 3.456 ==>
3.46)
NUMBER: 38 chiffres
NUMBER(p,s)
NUMBER(p) == NUMBER(p,0)
12
VARCHAR2-CHAR
VARCHAR2(N)
chaine de caractères de longueur variable
N =nombre de BYTES: 1 .. 4000 caractères
sous-types: STRING,VARCHAR (attention
compatibilité future)
CHAR(N)
chaine de caractères de longueur fixe
N =nombre de BYTES: 1 .. 2000 caractères
sous-types: CHARACTER
13
DATE - Autres
DATE
Date et heure avec précision YYYYMMDD HH:MM:SS
Codage interne en 7 bytes
Autres
RAW
LONG RAW
BLOB
…
14
Conversion de données
Deux types de conversion:
IMPLICITE: faite par ORACLE
EXPLICITE: à l'aide de fonctions de conversion
Conversions implicites
VARCHAR2 ou CHAR NUMBER
VARCHAR2 ou CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2
15
Conversion de données
Conversions explicites
TO_NUMBER TO_DATE
TO_CHAR TO_CHAR
16
Exemples
TO_CHAR(453)
'453‘
TO_NUMBER('345')
345
TO_NUMBER('abcd')
invalid_number
TO_DATE('25-JUL-95')
25-JUL-95
17
TO_CHAR + DATE
TO_CHAR{date, 'fmt')
la chaîne « fmt » précisant le format peut reprendre les éléments
suivants:
YYYY Année en 4 chiffres
YEAR Année en toute lettres
MM Mois en 2 chiffres
MONTH Mois en toutes lettres
DY Jour de la semaine en 3 lettres
DAY Jour de la semaine en toutes lettres
HH ou HH24 Heure en format 12 heures ou 24 heures
MI Minutes
SS Secondes
ex: SELECT TO_CHAR(sysdate, 'HH24:MI') FROM DUAL;
18
TO_CHAR + NUMBER
TO_CHAR(nombre, 'fmt ')
la chaîne « fmt » précisant le format peut reprendre les
éléments suivants:
9 Représente 1 chiffre
0 Oblige l'affichage du zéro
$ Mois en 2 chiffres
L Symbole monétaire (en fonction de la langue)
. Affiche le séparateur décimal
, Affiche le séparateur des milliers
19
NVL
Fonction de conversion d'une valeur NULL en une valeur
définie
en DATE
en NUMBER
en VARCHAR2
Exemples
NVL(comm, 0)
NVL(hiredate, '01-JAN -1980‘)
NVL(job, 'Aucun travail')
20
DECODE
Fonction retournant une valeur conditionnelle en
fonction de la valeur du 1er argument
Le nombre d'arguments est variable
Idem IF ... THEN ... ELSE IF ELSE IF ... ELSE ...
DECODE(col, v1, r1, v2, r2, ):
IF col =v1 RETURN r1
IF col =v2 RETURN r2 ...
21
Requêtes sur tables multiples
22
Objectifs
Jointure
Produit cartésien
Equi-jointure
Non équi-jointure
Jointures extérieures (outer joins)
Jointures réflectives (self joins)
23
Requête sur tables multiples
24
Jointure
Une jointure permet d'extraire des données se
trouvant dans deux ou plusieurs tables différentes
25
Produit cartésien
Il s'agit de la combinaison inconditionnelle des enregistrements
de deux ou plusieurs tables
3 enregistrements
6 enregistrements
2 enregistrements
26
Produit cartésien
Un produit cartésien est formé quand:
il n'y a pas de condition de jointure (WHERE ...)
la condition de jointure est invalide
Le nombre d'enregistrements retournés par un produit
cartésien:
N rec table1 X N rec table2 X ...
Si on exécute une requête sur 2 tables ayant chacune 100.000
enregistrement, et la condition de jointure est invalide, on aura
comme résultat 10.000.000.000 enregistrements !!
Faut bien vérifier la condition de jointure, en règle générale, le
nombre de condition est égale aux nombres de tables
impliquées -1
Exemple: 3 tables impliquées 2 conditions
27
Equi-jointure
Il s'agit d'une condition d'égalité entre colonnes
de tables jointes permettant de réaliser une
relation temporaire entre deux tables
SQL> SELECT emp.empno, emp.ename, dept.loc
2 FROM emp, dept
3 WHERE emp.deptno=dept.deptno
28
Equi-jointure
Mécanisme: SQL> SELECT emp.empno, emp.ename, dept.loc
2 FROM emp, dept
3 WHERE emp.deptno=dept.deptno;
Produit cartésien
Résultat
29
Equi-jointure
lorsque de tables jointes possèdent des colonnes
de même nom, il faut absolument préfixer le nom
des colonnes par le nom de la table (dot notation)
Ne pas préfixer par le nom de la table peut
induire l'interpréteur SQL en erreur; cela diminue
de plus les performances
On peut également utiliser des alias pour
distinguer deux colonnes portant le même nom
ou pour écrire des ordres SQL trop long
SQL> SELECT a.empno, a.ename, b.loc
2 FROM emp a, dept b
3 WHERE a . deptno=b.deptno;
30
NON équi-jointure
On peut réaliser des conditions de jointure basées
sur d'autres opérateurs de comparaison
31
Jointure extérieure (OUTER JOIN)
Si un enregistrement ne satisfait pas à la condition
de jointure, il n'est pas repris dans le résultat de la
requête
Un problème peut apparaître dans une équi-
jointure sur des colonnes pouvant contenir NULL
(pour rappel, COLONNE = NULL est toujours
FAUX)
Réaliser un outer join permet de voir les lignes qui
ne satisfont pas à la condition, mais qu'on aimerait
quand même bien voir
L'opérateur de jointure extérieure est (+)
32
OUTER JOIN
Exemple: comment voir les employés, le nom du
département où ils travaillent et les départements
n'employant personne?
33
SELF JOIN
Jointure d'une table avec elle même
Lorsqu'il existe une relation récursive
Exemple: afficher le manager des employés
34
Fonctions de groupe
35
Objectifs
Fonctions de groupe
AVG
SUM
MIN
MAX
COUNT
GROUP BY
HAVING
36
Fonction de groupes
A la différence des fonctions « single row », les fonctions
de groupe calculent un résultat à partir de plusieurs
enregistrements
Exemples
AVG retourne la moyenne
COUNT retourne le nombre d'enregistrements
MAX retourne la valeur maximum
MIN retourne la valeur minimum
STDDEV retourne l'écart-type
SUM retourne la somme
VARIANCE retourne la variance
37
AVG, SOM, MIN,MAX
Ces fonctions ignorent les valeurs NULL
Utiliser NVL pour tenir compte des NULL
38
COUNT
Permet de compter le nombre d'enregistrements
total dans une table
COUNT(*)
--------------
?
COUNT(*)
--------------
6
39
GROUP BY
Permet de regrouper certains enregistrements en
fonction de valeurs (colonnes, expressions)
Les fonctions de groupes produisent alors autant
de résultats qu'il n'y a de groupes
40
GROUP BY
Regrouper sur plusieurs colonnes
41
HAVING
WHERE permet de restreindre les enregistrements
HAVING permet de restreindre les groupes
42
Requêtes illégales
Ne pas mélanger des fonctions de groupe et des
éléments hors groupe (colonne, fonction single
row, expressions, ...)
SQL> SELECT deptno, COUNT(ename)
2 FROM emp ; SQL> SELECT deptno, COUNT(ename)
2 FROM emp
3 GROUP BY deptno;
43
Sous-requêtes (subqueries)
44
Objectifs
Sous-requêtes
Règles d'utilisation
sous-requêtes « single row »
sous-requêtes « multiple row »
IN
ANY
ALL
45
Sous-requête
Comment répondre à la question: Quels sont les
employés ayant un salaire supérieur à celui de JONES?
Cette question doit être décomposée en:
une sous-requête permettant de connaître le salaire de JONES
une requête principale permettant de connaître les employés
dont le salaire est supérieur à celui de JONES
46
Règles
Entourer la sous-requête avec des parenthèses
Placer la sous-requête à DROITE de l'opérateur de
comparaison
Ne pas utiliser ORDER BY dans une sous-requête
I1 existe 2 types de sous-requêtes:
SINGLE ROW (ne retourne qu'un enregistrement)
MULTI ROW (peut retourner plus d'un enregistrement)
Utiliser des opérateurs « one row » avec les 1ères
Utiliser des opérateurs « multi row » avec les 2èmes
47
Sous-requête « mutiple row »
Retourne plusieurs valeurs
Il faut alors utiliser les opérateurs de comparaisons
suivant:
IN un membre d'une liste
ANY compare chaque valeur à chaque valeur de la
sous requête
ALL compare toutes les valeurs de la sous-requête
48
Table EMP
Pour les exemples suivants
49
ANY
ANY :« à au moins un des enregistrements»
Quels sont les employés dont le job n'est pas
'CLERK' et dont le salaire est inférieur à un des
salaires des employés dont le job est 'CLERK'
800
SQL> SELECT empno, ename, job 1100
2 FROM emp 950
3 Where sal < ANY (SELECT sal FROM emp 1300
4 WHERE job=‘CLERK’)
5 AND job <>’CLERK’;
50
ALL
ALL: « à tous les enregistrements»
Quels sont les employés dont le job n'est pas
'CLERK' et dont le salaire est inférieur aux
moyennes salariales par département
2916.66667
SQL> SELECT empno, ename, job 2175
2 FROM emp 1566,66667
3 Where sal < ALL (SELECT AVG(sal) FROM emp
4 GROUP BY Deptno)
5 AND job <>’CLERK’;
EMPNO ENAME JOB
---------------------------------------
7521 WARD SALESMAN
7654 MARTIN SALESMAN
7844 TURNER SALESMAN
51
FROM et sous-requête
Une sous-requête constitue une table « virtuelle»
temporaire et peut donc se retrouver dans la
clause FROM
Comment afficher une liste des employés
reprenant leur nom, salaire et salaire moyen de
leur département tel que ce salaire est supérieur
au salaire moyen de leur département?
SQL> SELECT a.ename, a.sal, a.deptno, b.salavg
2 FROM emp a, (SELECT deptno, AVG(sal) salavg FROM emp
3 GROUP BY deptno) b
4 WHERE a . deptno = b.deptno AND
5 a.sal > b.salavg;
52
SQL*PLUS
53
Objectifs
Comment écrire des rapports interactifs?
Utiliser des variables temporaires (&)
Utiliser des variables globales (&&)
DEFINE et UNDEFINE
ACCEPT
54
SQL*Plus
Outil ORACLE d'interaction avec le RDBMS fourni
Permet d'exécuter des commandes SQL pour:
gérer des données
introduire et compiler des programmes stockés
gérer la sécurité
établir des diagnostics de fonctionnement du système
administrer le système
Outil fonctionnant en mode « terminal»
Il existe des outils ORACLE + évolués, proposant
notamment une interface graphique
55
Rapports interactifs
Requêtes paramétrables sur la DB, parfois très complexes
Pouvant être exécutés plusieurs fois, à des moments
différents sans devoir réintroduire et réécrire caractère
par caractère les commandes
Exemple:
Quel sont les frais de fonctionnement d'un département?
Evaluer l'évolution de jour en jour ...
56
Variables préfixées par &
Si lors de l'exécution d'une requête, SQL*PLUS
rencontre le caractère « &», il considère le mot-
clé suivant comme une variable et propose à
l'utilisateur d'introduire une valeur.
Après exécution, le contenu de la variable est
perdu
SQL> SELECT empno, ename, saI, deptno
2 FROM emp
3 WHERE empno =&emp_num;
Enter value for emp_num : 7369
EMPNO ENAME SAL DEPTNO
--------------------------------------------------
7369 SMITH 800 20
57
Variables date et caractères
Il faut entourer la variable préfixée par‘ ‘
58
Remplacement
Une variable peut remplacer:
une condition WHERE
une clause ORDER BY
Le nom d'une colonne
Le nom d'une table
Un SELECT complet
Exemple
SQL> SELECT empno, ename, &col_name
2 FROM emp
3 WHERE &condition
4 ORDER BY &order_col;
59
Variables préfixées par &&
Une variable préfixée par && est une variable « globale »
Sa valeur est demandée la 1ère fois et son contenu est
réutilisé à chaque requête jusqu'à ...
Exemple
60
DEFINE -UNDEFINE
DEFINE permet de créer une variable et de lui
affecter une valeur
SQL> DEFINE deptname=sales;
SQL> SELECT *
2 FROM dept
3 WHERE dname = UPPER (‘&deptname' ) ;
61
ACCEPT
Permet de créer une variable et d'associer un
message' PROMPT' affiché lors de la demande
interactive de la valeur à l'utilisateur
SQL> ACCEPT dept PROMPT 'Quel est le département: ' ;
SQL> SELECT *
2 FROM dept
3 WHERE dname = UPPER('&dept‘);
62
Autres commandes
Command Purpose
CLEAR Used to clear something. CLEAR BUFFER erases all text currently in the buffer. CLEAR COLUMNS clears all column
formatting. CLEAR SCREEN clears the SQL*Plus window.
COLUMN Sets column formatting options for the output of a query.
CONNECT Used to connect a user to an Oracle database.
DEL Deletes one or more lines from the buffer.
DESCRIBE Retrieves a description of a database object.
DISCONNECT Disconnects the current user from the database but leaves the SQL*Plus session open.
EDIT Retrieves a stored script and opens it for editing in the operating system's text editor.
EXECUTE Executes PL/SQL program units from the prompt.
EXIT Disconnects the current user from the database and closes the SQL*Plus session.
GET Retrieves a stored script into the buffer but does not open it for editing.
HOST Calls the operating system's command prompt without leaving SQL*Plus.
LIST or ; Lists one or more lines of text currently in the buffer. If a semicolon is entered at the end of a SQL statement, the statement is
immediately executed. If a semicolon is issued alone at the prompt, the current contents of the buffer are listed.
RUN or / Executes the SQL statement currently stored in the buffer.
SAVE Saves the contents of the buffer to a script file.
SET Sets any of the SQL*Plus environment variables. Multiple variables can be set with a single SET command.
SHOW Shows the current setting of any or all of the SQL*Plus environment variables.
SHUTDOWN Shuts down the Oracle database.
SPOOL Sends the output of a SQL statement to a text file.
START or @ Retrieves a stored script into the buffer and immediately runs it.
STARTUP Starts up the Oracle database.
63
Gestion des données
64
Objectifs
Data Manipulation Language (DML)
INSERT
UPDATE
DELETE
Contraintes d'intégrité
Transactions
COMMIT
ROLLBACK
SAVEPOINT
65
DML
Langage de manipulation de données (un sous-
ensemble d'instructions SQL)
Instructions DML
Ajouter de nouveaux enregistrements dans une table
Modifier des enregistrements existants
Supprimer des enregistrements
Transaction
ensemble d'instructions DML formant une unité
logique de travail
possibilité d'annuler cet ensemble d'instructions
exemple: transfert d'un montant entre 2 comptes
bancaires
66
INSERT
Permet d'ajouter de nouveaux enregistrements
dans une table
Syntaxe:
1 INSERT INTO table [(coll[, col2 [,.. ]]) ]
2 VALUES (vall [, val2[, …]] ) ;
67
INSERT·colonnes optionnelles
Une colonne optionnelle est une colonne pouvant
avoir des valeurs NULL
Insertion des NULL:
implicitement, sans préciser la colonne et la valeur
associée
INSERT INTO dept (deptno, dname)
2 VALUES (70, 'FINANCE');
68
INSERT- Fonctions & variables
Utilisation de fonctions « single row » possible
pour insérer des valeurs:
SYSDATE
TO_DATE,TO_CHAR,TO_NUMBER
…
INSERT INTO dept (deptno, dname)
2 VALUES (70, UPPER('Finance));
69
INSERT - plusieurs lignes
Insert + sous-requête sans clause VALUES
ATTENTION: il doit y avoir correspondance entre
les colonnes (nombre et type de données)
70
UPDATE
Mise à jour de données, une ou plusieurs colonnes,
dans un ou plusieurs enregistrements
Syntaxe
UPDATE table
2 SET coll = vall[, col2 = val2[,…]]
3 [WHERE condition] ;
Une seule ligne
Plusieurs lignes
71
UPDATE -multi-colonnes
Exemple: donner à l'employé n° 7698 le même job
et département de travail que l'employé n° 7499
72
UPDATE –à partir d'autres requêtes
On peut utiliser des sous-requêtes pour mettre à
jour des valeurs ou pour choisir les enregistrements
que l'on va modifier:
73
Contraintes d'intégrité
Ces contraintes sont définies dans la DB et
vérifiées à chaque mise à jour de données
Types de contrainte:
valeurs de données particulières (NOT NULL,
NUMBER(3), ...)
relation entre données (FK ==> PK) (intégrité
référentielle)
UPDATE emp
2 SET deptno = 55 WHERE deptno = 10
ERROR at line 1:
ORA-D2291: integrity constraint
(SCOTT.FK_DEPTNO) violated -parent key not found
74
DELETE
Permet d'effacer un ou plusieurs enregistrements
Syntaxe:
DELETE FROM table [WHERE condition];
Une ligne
DELETE FROM dept
2 WHERE dname = 'DEVELOPMENT';
Plusieurs lignes
DELETE FROM dept;
75
DELETE et sous-requête
Exemple: supprimer les employés du département SALES
76
Transactions
= ensemble d'instructions DML formant une unité logique
de travail
possibilité d'annuler cette ensemble d'instructions
exemple: transfert d'un montant entre 2 comptes bancaires
Début: 1ère instruction SQL (par session)
FIN:
COMMIT
ROLLBACK
instruction DDL ou DCL (le commit est alors automatique)
fin de session (déconnexion d'un utilisateur)
Arrêt du système RDBMS
77
COMMIT - ROLLBACK
COMMIT permet de rendre définitif tout changement de
données
ROLLBACK annule toutes les opérations de MAJ jusqu'au
précédent COMMIT ou début de session
SAVEPOINT name: point intermédiaire
ROLLBACK TO SAVEPOINT name
en cas de problème système, ROLLBACK implicite
Ceci permet d'assurer la consistance des données
78
COMMIT - ROLLBACK
AVANT COMMIT ou ROLLBACK:
on peut revenir en arrière
la session courante peut voir les changements effectués (pas
les autres qui voient les données antérieures)
mécanisme de verrou (Iocking) sur les enregistrements
modifiés (pour éviter d'autres MAJ)
APRES COMMIT ou ROLLBACK:
on ne peut PLUS revenir en arrière
les changements sont visibles par tout le monde
Les enregistrements verrouillés sont déverrouillés
Les savepoints (intermédiaires) sont effacés
79
COMMIT - ROLLBACK
Exemples
SQL> UPDATE emp SET deptno = 10
2 WHERE empno = 7782;
1row updated.
SQL> COMMIT;
Commit complete
rows deleted.
SQL> ROLLBACK;
Rollback complete
80
Savepoint
Permet de positionner des jalons intermédiaires
SQL> UPDATE . ..
SQL> INSERT . . .
81
locking (verrouillage)
ORACLE verrouille
pour prévenir des interactions de mise à jour entre
transactions concurrentes
le fait automatiquement
pendant toute la durée de la transaction
Le programme peut explicitement demander certains
verrous:
au niveau d'une table entière (maintenance)
lorsqu'on effectue une lecture (par curseur -voir PL/SQL) et
que l'on sait qu'on va mettre à jour les données
82
Gestion des tables
83
Objectifs
Création d'une table –syntaxe
Valeurs par défaut
Data Dictionary
Modifier la structure d'une table
Supprimer une table
Renommer une table
Vider le contenu d'une table
Commentaires sur une table
84
Table
Unité de stockage d'informations
Composée de lignes et colonnes
Porte un nom qui:
doit commencer par une lettre
doit avoir une longueur comprise entre 1 et 30 caractères
ne peut contenir que les caractères A -Z, a -z, 0 -9, _, $, #
doit être différent d'un mot réservé ORACLE
Appartient à un utilisateur (son créateur) ou autrement
dit un schéma
85
Création d’une table
L'utilisateur doit avoir les privilèges adéquats
Nécessite de disposer d'un espace de stockage
Syntaxe générale
86
Valeurs par défaut
Cette valeur sera utilisée lors d'un INSERT si
aucune valeur n'est précisée pour la colonne
Le type de donnée de cette valeur doit être
compatible avec le type de donnée de la colonne
Ies valeurs autorisées sont:
les valeurs constantes
des expressions
des fonctions SQL
87
Exemple
Comment créer la table DEPT
88
Data dictionary
Toutes les informations «système» sont accessibles par
des requêtes SQL sur des pseudo-tables ou vues «
système»
Toutes les tables ou vues du DATA DICTIONARY :
All_CATALOG
USER_TABLES
DESC USER_TABLES
description des tables d'un utilisateur
USER_TAB_COLUMNS
DESC USER_TAB_COLUMNS
description des colonnes d'une table d'un utilisateur
89
Types de données [DATATYPE]
VARCHAR2(n) chaîne de caractères de longueur variable (4000)
90
Sous-requête
Création d'une table et remplissage à partir d'une
sous-requête
Les colonnes sont de même nombre et type que
les colonnes sélectionnées
CREATE TABLE [schema. ] table AS Subquery
91
ALTER TABLE
Modifier la structure d'une table existante:
ajouter une colonne
modifier une colonne existante (type si possible,
longueur)
définir ou modifier une valeur par défaut
ajouter des contraintes
…
1 ALTER TABLE table
ADD (colname DATATYPE [DEFAULT expr] [, …] ) ;
92
DROP TABLE
Supprimer une table
ET toutes ses données
COMMIT de toutes les transactions en cours (sur la table)
ET les indexes associés à cette table
Il est IMPOSSIBLE de revenir en arrière par le
mécanisme ROLLBACK (utiliser alors le dernier
BACKUP récent, MAIS ... !!!)
93
RENAME
Permet de changer le nom d'une table, mais aussi d'autres
objets ORACLE (vue, synonymes, sequences, ...)
Seul le propriétaire de l'objet peut faire cette opération
94
TRUNCATE
Permet de vider une table sans la détruire
Plus rapide qu'un DELETE FROM table;
Libère l'espace de stockage
Ne remplit pas les fichiers de logging
Le mécanisme transactionnel n'est PAS applicable; il n'est
donc pas possible de récupérer les données effacées
accidentellement (sauf BACKUP)
95
Contraintes
96
Objectifs
Définition d'une contrainte
Contrainte NOT NULL
Contrainte PRIMARY KEY
Contrainte FOREIGN KEY
Contrainte CHECK
Contrainte: ajouter, supprimer, activer, désactiver •
Visualiser des contraintes
97
Contraintes
= règles définies dans la DB
Au niveau d'une table ou d'une ou plusieurs colonnes de
cette table
Régissent les valeurs que peuvent prendre certaines
colonnes ou les relations entre tables
Différents types:
NOT NULL
UNIQUE KEY
PRIMARY KEY
FOREIGN KEY
CHECK
TYPE CONSTRAINT
98
Contraintes
Une contrainte porte un nom défini par l'utilisateur ou un
nom système (SYS-C...)
Une contrainte peut être créée lors de la création d'une
table ou par après
Elles sont visibles dans le DATA DICTIONARY
(USER_CONSTRAINTS)
Une fois créées, elles sont vérifiées automatiquement par
ORACLE, dans un ordre quelconque
Les contraintes peuvent être activées ou désactivées
99
Définir une contrainte
Syntaxe
CREATE TABLE [schema.]table
( coll DATATYPE [DEFAULT exprl [COLUMN_CONSTRAINT] ,
...
colN DATATYPE [DEFAULT expr] [COLUMN_CONSTRAINT}
[TABLE CONSTRAINT]) ;
Exemple
SQL> CREATE TABLE emp
2 ( empno NUMBER(4) ,
3 ename VARCHAR2(10) ,
4 deptno NUMBER(7,2) NOT NULL,
5 CONSTRAINT emp_empno_PK PRlMARY KEY (empno)); ;
100
NOT NULL
Cette contrainte interdit d'insérer des valeurs
NULL dans une colonne
Exemple
101
UNIQUE KEY
Cette contrainte interdit deux valeurs identiques
dans la même colonne OU plusieurs mêmes
combinaisons de valeurs dans plusieurs colonnes
Exemple
102
PRIMARY KEY
Cette contrainte permet de définir la ou les
colonnes d'une table identifiant de manière
univoque un enregistrement
Il ne peut y avoir qu'UNE seule PK par table
Exemple
SQL> CREATE TABLE dept
2 ( deptno NUMBER (2)
3 dname VARCHAR2(14),
4 loc VARCHAR2 (13),
5 CONSTRAINT dept_dname_UK UNIQUE (dname),
6 CONSTRAINT dept_deptno_PK PRIMARY KEY (deptno));
103
FOREIGN KEY
Cette contrainte permet de définir une relation «
maitre-détail » entre deux tables
La FK d'une table « détail» pointe vers la PK de la
table « maitre »
Ce type de contrainte permet de vérifier l'intégrité
référentielle de données, donc permet d'éviter:
d'insérer une référence inexistante dans la table «
maître»
d'effacer un enregistrement « maître» référencé par des
enregistrements « détail »
Permet d'effectuer des «DELETE CASCADE»
104
FOREIGN KEY
1-1 O-n
Maitre
détail
105
CHECK
Ce type de contrainte permet de définir une
condition que doit respecter un enregistrement
ou la valeur d'une colonne
Exemple
SQL> CREATE TABLE emp
2 ( empno NUMBER(4) ,
3 ename VARCHAR2(10) NOT NULL,
4 job VARCHAR2(9) ,
5 comm NUMBER(7 , 2)
6 deptno NUMBER (7, 2) NOT NULL,
7 CONSTRAINT emp_deptno_ck CHECK (deptno BETWEEN 10 AND 99));
106
Ajouter une contrainte
Sur une table existante, utiliser la commande
ALTER TABLE
Exemple
107
Supprimer une contrainte
Utiliser la commande ALTER TABLE
108
Désactiver une contrainte
Désactiver une contrainte ne supprime pas sa
définition; seule sa vérification par ORACLE est
suspendue. Elle peut être réactivée à volonté
Utiliser la commande ALTER TABLE + DISABLE
Utiliser la clause CASCADE pour désactiver les
contraintes associées
109
Réactiver une contrainte
Utiliser la commande ALTER TABLE + ENABLE
110
Afficher une contrainte
Interroger la table « USER_CONSTRAINTS»
SQL> SELECT constraint_name, constraint_type, search_condition
2 FROM user_constraints
3 WHERE table_name = 'EMP' ;
111