Vous êtes sur la page 1sur 111

Fonctions single row

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

 Une fonction « single row » retourne une valeur


pour chaque enregistrement
 Oracle fournit un ensemble de fonctions utilitaires

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

NUMBER CHAR ou VARCHAR2 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

SQL> SELECT emp.empno, emp.ename, dept.loc


2 FROM emp, dept
3 WHERE emp.deptno=dept.deptno;

25
Produit cartésien
 Il s'agit de la combinaison inconditionnelle des enregistrements
de deux ou plusieurs tables

3 enregistrements

6 enregistrements

2 enregistrements

SQL> SELECT tabl. coll, tabl.col2, tab2.coll, tab2.col2


2 FROM tabl, tab2;

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

 Souvent, relation entre une clé primaire et une clé


étrangère

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

SQL> SELECT e.empno, e. ename, s.grade , salgrade


2 FROM emp e, saIgrade s
3 WHERE e . sal BETWEEN s.losal AND s.HISAL;

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?

SQL> SELECT e.empno, d.deptno, d.dname


2 FROM emp e, dept d
3 WHERE e.deptno(+) = d.deptno
4 ORDER BY e.deptno;

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

SQL> SELECT w.ename "Employé", m.ename "Manager"


2 FROM emp w, emp m
3 WHERE w.mgr = m.empno;

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

SQL> SELECT AVG(sal), MAX(sal), MIN(sal), SUM(sal)


2 FROM emp
3 WHERE job LlKE ‘SALE%‘;

AVG(SAL) MAX (SAL) MIN (SAL) SUM(SAL)


----------------------------------------------------------------
1400 1600 1250 5600

38
COUNT
 Permet de compter le nombre d'enregistrements
 total dans une table
COUNT(*)
--------------
?

 le nombre d'employés du département 30

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

SQL> SELECT deptno, MAX (saI)


2 FROM emp
3 GROUP BY deptno
4 HAVING MAX(saI) > 2900;

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;

SQL> SELECT deptno, AVG (saI)


2 FROM emp
SQL> SELECT deptno, AVG (saI)
3 WHERE AVG(saI) > 2000
2 FROM emp
4 GROUP BY deptno;
3 GROUP BY deptno;
4 HAVING AVG(saI) > 2000;

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

SQL> SELECT ename FROM emp


2 WHERE saI > (SELECT saI FROM emp WHERE ename = '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’;

EMPNO ENAME JOB


---------------------------------------
7521 WARD SALESMAN
7654 MARTIN SALESMAN

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‘ ‘

SQL> SELECT empno , ename, sal, deptno


2 FROM emp
SET VERIFY ON
3 WHERE job = '&job_title';
SET VERIFY OFF

Enter value for job_title : ANALYST


old 3: WHERE job = ' &job_title'
new 3: WHERE job = ' ANALYST'

EMPNO ENAME SAL DEPTNO


---------- ---------- ------- -----------
7788 SCOTT 3000 20
7902 FORD 3000 20

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

SQL> SELECT empno, ename, &&col_name


2 FROM emp
3 ORDER BY &order_col;

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' ) ;

 UNDEFINE permet de détruire la variable


SQL> UNDEFINE deptname;
SQL> SELECT *
2 FROM dept
3 WHERE dname = UPPER (‘&deptname' ) ;
Symbol deptname UNDEFINED

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‘);

Quel est le département: Sales


DEPTNO DNAME LOC
--------------------------------------------------------
30 SALES CHICAGO

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[, …]] ) ;

 ATTENTION: correspondance colonne -valeur


 Exemple:
INSERT INTO dept (deptno, dname, loc)
2 VALUES (50, 'DEVELOPMENT', 'DETROIT');

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');

 explicitement, en précisant le mot-clé NULL

INSERT INTO dept (deptno, dname, loc)


2 VALUES (70, 'FINANCE', NULL);

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

 En SQL*PLUS, possibilité d'utiliser des variables


préfixées (& et &&)
INSERT INTO dept (deptno, dname)
2 VALUES (&deptid, UPPER('&deptname‘));

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)

INSERT INTO manager (id, name, salary, hiredate)


2 SELECT empno, ename, saI, hiredate)
3 FROM emp
4 WHERE job= 'MANAGER'·

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

UPDATE emp SET deptno = 20


2 WHERE empno = 7782;

 Plusieurs lignes

UPDATE emp SET deptno = 20;

71
UPDATE -multi-colonnes
 Exemple: donner à l'employé n° 7698 le même job
et département de travail que l'employé n° 7499

SQL> UPDATE emp


2 SET (job, deptno) = (SELECT job, deptno
3 FROM EMP
4 WHERE empno = 7499)
5 WHERE empno = 7698;

 Exemple: changer le job et le département de


l'employé n° 7698

SQL> UPDATE emp


2 SET job=salesman, deptno=sales
3 WHERE empno = 7698;

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:

SQL> UPDATE emp


2 SET deptno = (SELECT deptno
3 FROM EMP
4 WHERE empno = 7788)
5 WHERE job = (SELECT job
6 FROM emp
7 WHERE empno = 7788) ;

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;

DELETE FROM emp job = 'CLERK' ;

75
DELETE et sous-requête
 Exemple: supprimer les employés du département SALES

DELETE FROM dept


2 WHERE deptno = (SELECT deptno
3 FROM dept
4 WHERE dname =' 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

SQL> DELETE FROM emp;

rows deleted.

SQL> ROLLBACK;
Rollback complete

80
Savepoint
 Permet de positionner des jalons intermédiaires

SQL> UPDATE . ..

SQL> SAVEPOINT update_done;


Savepoint created.

SQL> INSERT . . .

SQL> ROLLBACK TO update_done;


Rollback complete

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

CREATE TABLE [schema.] table


(
coll DATATYPE [DEFAULT expr] [COLUMN_CONSTRAINT],
...
colN DATATYPE [DEFAULT expr] [COLUMN_CONSTRAINT]
);

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

CREATE TABLE dept


( deptno NUMBER(2) NOT NULL,
dname VARCHAR2 (14) ,
loc VARCHAR2(13)) ;

SQL> describe dept ;

Name Null? Type


------- ----------- --------
DEPTNO NOT NULL NUMBER (2)
DNAME VARCHAR2 (14)
LOC VARCHAR2 (13 )

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)

 CHAR(N) chaîne de caractères de longueur fixe (2000)

 NUMBER(p,s) nombre de p chiffres et s chiffres décimaux

 DATE date (YYVYMMOO-HH:MI:SS, -4712 < y < 9999)

 LONG chaîne de caractères de longueur variable (2Gb)

 CLOB chaîne de caractères de longueur variable (4Gb)

 RAW données binaires de moins de 2000

 LONG RAW données binaires de moins de 2Gb

 BLOB données binaires de moins de 4Gb

 BFILE données binaires en fichier externe moins de 4Gb

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

 Permet d'imposer le nom des colonnes


CREATE TABLE [schema.]table
[coll [, co12 [, …]]]
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] [, …] ) ;

ALTER TABLE table


MODIFY (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 ... !!!)

DROP TABLE dept;


Table dropped.

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

RENAME dept TO department;


Table renamed.

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)

TRUNCATE TABLE dept;


Table truncated.

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

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

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

SQL> CREATE TABLE dept


2 (deptno NUMBER(2),
3 dname VARCHAR2 (14),
4 loc VARCHAR2 (13),
5 CONSTRAINT dept_dname_UK UNIQUE (dname) ) ;

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

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_fk FOREIGN KEY (deptno)
8 REFERENCE dept(deptno));

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

SQL> ALTER TABLE emp


2 ADD CONSTRAINT emp_mgr_fk
3 FOREIGN KEY (mgr) REFERENCES emp(empno)

107
Supprimer une contrainte
 Utiliser la commande ALTER TABLE

SQL> ALTER TABLE emp


2 DROP CONSTRAINT emp_mgr_fk;

 Pour retirer une PK et la FK associée

SQL> ALTER TABLE dept


2 DROP PRIMARY KEY CASCADE;

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

SQL> ALTER TABLE dept


2 DISABLE CONSTRAINT emp_empno_PK CASCADE;

109
Réactiver une contrainte
 Utiliser la commande ALTER TABLE + ENABLE

SQL> ALTER TABLE dept


2 ENABLE CONSTRAINT emp_empno_PK;

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' ;

 « USER_CONS_COLUMNS» pour ses colonnes


associées:

SQL> SELECT constraint_name, column name


2 FROM user_cons_columns
3 WHERE table_name ='EMP' ;

111