You are on page 1of 45

9

Manipuler des donnes

Copyright 2007, Oracle. Tous droits rservs.

Objectifs
A la fin de ce chapitre, vous pourrez :
dcrire chaque instruction LMD (Langage de manipulation de
donnes)
insrer des lignes dans une table
mettre jour des lignes d'une table
supprimer des lignes d'une table
contrler les transactions

9-2

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Ajouter de nouvelles lignes dans une table
Instruction INSERT

Modifier des donnes dans une table


Instruction UPDATE

Supprimer des lignes d'une table :


Instruction DELETE
Instruction TRUNCATE

Contrler les transactions de base de donnes l'aide


des instructions COMMIT, ROLLBACK et SAVEPOINT
Cohrence en lecture
Clause FOR UPDATE dans une instruction SELECT

9-3

Copyright 2007, Oracle. Tous droits rservs.

Langage de manipulation de donnes


Une instruction LMD est excute dans les cas suivants :
Vous ajoutez de nouvelles lignes une table.
Vous modifiez des lignes existantes d'une table.
Vous supprimez des lignes existantes d'une table.

Une transaction est compose d'un ensemble d'instructions


LMD qui forment une unit de travail logique.

9-4

Copyright 2007, Oracle. Tous droits rservs.

Ajouter une nouvelle ligne une table


Nouvelle
ligne

DEPARTMENTS

Insrez une nouvelle ligne


dans la table
DEPARTMENTS.

9-5

Copyright 2007, Oracle. Tous droits rservs.

Syntaxe de l'instruction INSERT


Ajoutez de nouvelles lignes une table l'aide de
l'instruction INSERT :
INSERT INTO
VALUES

table [(column [, column...])]


(value [, value...]);

Avec cette syntaxe, une seule ligne est insre la fois.

9-6

Copyright 2007, Oracle. Tous droits rservs.

Insrer de nouvelles lignes


Insrez une nouvelle ligne contenant des valeurs
pour chaque colonne.
Enumrez les valeurs dans l'ordre par dfaut des colonnes
de la table.
Enumrez ventuellement les colonnes indiques
dans la clause INSERT.
INSERT INTO departments(department_id,
department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);

Placez les valeurs de type caractre et date entre


apostrophes.

9-7

Copyright 2007, Oracle. Tous droits rservs.

Insrer des lignes comprenant des valeurs NULL


Mthode implicite : Omettre la colonne de la liste.
INSERT INTO
VALUES

departments (department_id,
department_name)
(30, 'Purchasing');

Mthode explicite : Indiquer le mot-cl NULL dans la clause


VALUES.
INSERT INTO
VALUES

9-8

departments
(100, 'Finance', NULL, NULL);

Copyright 2007, Oracle. Tous droits rservs.

Insrer des valeurs spciales


La fonction SYSDATE enregistre la date du jour et l'heure
actuelle.
INSERT INTO employees (employee_id,
first_name, last_name,
email, phone_number,
hire_date, job_id, salary,
commission_pct, manager_id,
department_id)
VALUES
(113,
'Louis', 'Popp',
'LPOPP', '515.124.4567',
SYSDATE, 'AC_ACCOUNT', 6900,
NULL, 205, 110);

9-9

Copyright 2007, Oracle. Tous droits rservs.

Insrer des valeurs de date et d'heure spcifiques


Ajoutez un nouvel employ.
INSERT INTO employees
VALUES
(114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),
'SA_REP', 11000, 0.2, 100, 60);

Vrifiez votre ajout.

9 - 10

Copyright 2007, Oracle. Tous droits rservs.

Crer un script
Utilisez une variable de substitution avec esperluette (&) dans
une instruction SQL pour afficher une invite de saisie de valeur.
Une telle variable est un paramtre substituable pour une valeur.
INSERT INTO departments
(department_id, department_name, location_id)
VALUES

9 - 11

(&department_id, '&department_name',&location);

Copyright 2007, Oracle. Tous droits rservs.

Copier des lignes depuis une autre table


Ecrivez votre instruction INSERT avec une sous
interrogation :
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM
employees
WHERE job_id LIKE '%REP%';

N'utilisez pas la clause VALUES.


Le nombre de colonnes de la clause INSERT doit
correspondre celui de la sous-interrogation.
Insrez toutes les lignes renvoyes par la sous-interrogation
dans la table sales_reps.

9 - 12

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Ajouter de nouvelles lignes dans une table
Instruction INSERT

Modifier des donnes dans une table


Instruction UPDATE

Supprimer des lignes d'une table :


Instruction DELETE
Instruction TRUNCATE

Contrler les transactions de base de donnes l'aide


des instructions COMMIT, ROLLBACK et SAVEPOINT
Cohrence en lecture
Clause FOR UPDATE dans une instruction SELECT

9 - 13

Copyright 2007, Oracle. Tous droits rservs.

Modifier des donnes dans une table


EMPLOYEES

Mettez des lignes jour dans la table


EMPLOYEES :

9 - 14

Copyright 2007, Oracle. Tous droits rservs.

Syntaxe de l'instruction UPDATE


Modifiez les valeurs existantes d'une table avec l'instruction
UPDATE :
UPDATE
SET
[WHERE

table
column = value [, column = value, ...]
condition];

Mettez jour plusieurs lignes la fois (si ncessaire).

9 - 15

Copyright 2007, Oracle. Tous droits rservs.

Mettre jour des lignes d'une table


Si vous indiquez la clause WHERE, seules les valeurs
d'une ou plusieurs lignes spcifiques sont modifies :
UPDATE employees
SET
department_id = 50
WHERE employee_id = 113;

Si vous omettez la clause WHERE, les valeurs de toutes


les lignes de la table sont modifies :
UPDATE
SET

copy_emp
department_id = 110;

Indiquez SET column_name= NULL pour remplacer


la valeur d'une colonne par NULL.
9 - 16

Copyright 2007, Oracle. Tous droits rservs.

Mettre jour deux colonnes avec


une sous-interrogation
Mettez jour le poste et le salaire de l'employ 113 de sorte
qu'ils correspondent ceux de l'employ 205.
UPDATE
SET

WHERE

9 - 17

employees
job_id = (SELECT job_id
FROM
employees
WHERE
employee_id = 205),
salary = (SELECT salary
FROM
employees
WHERE
employee_id = 205)
employee_id
= 113;

Copyright 2007, Oracle. Tous droits rservs.

Mettre jour des lignes sur la base


d'une autre table
Utilisez les sous-interrogations des instructions UPDATE pour
mettre jour les valeurs des lignes d'une table sur la base des
valeurs d'une autre table :
UPDATE
SET

copy_emp
department_id

WHERE

job_id

9 - 18

(SELECT department_id
FROM employees
WHERE employee_id = 100)
(SELECT job_id
FROM employees
WHERE employee_id = 200);

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Ajouter de nouvelles lignes dans une table
Instruction INSERT

Modifier des donnes dans une table


Instruction UPDATE

Supprimer des lignes d'une table :


Instruction DELETE
Instruction TRUNCATE

Contrler les transactions de base de donnes l'aide


des instructions COMMIT, ROLLBACK et SAVEPOINT
Cohrence en lecture
Clause FOR UPDATE dans une instruction SELECT

9 - 19

Copyright 2007, Oracle. Tous droits rservs.

Supprimer une ligne d'une table


DEPARTMENTS

Supprimez une ligne de la table DEPARTMENTS :

9 - 20

Copyright 2007, Oracle. Tous droits rservs.

Instruction DELETE
Vous pouvez supprimer des lignes existantes d'une table
l'aide de l'instruction DELETE :
DELETE [FROM]
[WHERE

9 - 21

table
condition];

Copyright 2007, Oracle. Tous droits rservs.

Supprimer des lignes d'une table


Si vous indiquez la clause WHERE, des lignes spcifiques
sont supprimes :
DELETE FROM departments
WHERE department_name = 'Finance';

Si vous omettez la clause WHERE, toutes les lignes


de la table sont supprimes :
DELETE FROM

9 - 22

copy_emp;

Copyright 2007, Oracle. Tous droits rservs.

Supprimer des lignes sur la base


d'une autre table
Utilisez les sous-interrogations des instructions DELETE
pour supprimer des lignes d'une table sur la base des valeurs
d'une autre table :
DELETE FROM employees
WHERE department_id =
(SELECT department_id
FROM
departments
WHERE department_name
LIKE '%Public%');

9 - 23

Copyright 2007, Oracle. Tous droits rservs.

Instruction TRUNCATE
Elle supprime toutes les lignes d'une table, en laissant
cette dernire vide sans toucher sa structure.
Il s'agit d'une instruction LDD (langage de dfinition
de donnes) et non d'une instruction LMD. Il est donc difficile
de l'annuler.
TRUNCATE
Syntaxe : TABLE table_name;
TRUNCATE
Exemple :TABLE copy_emp;

9 - 24

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Ajouter de nouvelles lignes dans une table
Instruction INSERT

Modifier des donnes dans une table


Instruction UPDATE

Supprimer des lignes d'une table :


Instruction DELETE
Instruction TRUNCATE

Contrler les transactions de base de donnes l'aide


des instructions COMMIT, ROLLBACK et SAVEPOINT
Cohrence en lecture
Clause FOR UPDATE dans une instruction SELECT

9 - 25

Copyright 2007, Oracle. Tous droits rservs.

Transactions de base de donnes


Une transaction de base de donnes se compose
des lments suivants :
Des instructions LMD qui apportent une modification
cohrente aux donnes
Une instruction LDD
Une instruction LCD (langage de contrle de donnes)

9 - 26

Copyright 2007, Oracle. Tous droits rservs.

Transactions de base de donnes : Dbut et fin


Elles commencent avec l'excution de la premire instruction
SQL LMD.
Elles finissent lorsque l'un des vnements suivants
se produit :
Une instruction COMMIT ou ROLLBACK est excute.
Une instruction LDD ou LCD est excute
(validation automatique).
L'utilisateur quitte SQL Developer ou SQL*Plus.
Le systme connat une dfaillance.

9 - 27

Copyright 2007, Oracle. Tous droits rservs.

Avantages des instructions COMMIT et ROLLBACK


Avec les instructions COMMIT et ROLLBACK, vous pouvez :
garantir la cohrence des donnes
prvisualiser les modifications apportes aux donnes
avant de les rendre dfinitives
regrouper de faon logique les oprations associes

9 - 28

Copyright 2007, Oracle. Tous droits rservs.

Instructions explicites de contrle


des transactions
Temps

COMMIT
Transaction
DELETE
SAVEPOINT A
INSERT

UPDATE
SAVEPOINT B
INSERT

9 - 29

ROLLBACK
to SAVEPOINT B

ROLLBACK
to SAVEPOINT A

Copyright 2007, Oracle. Tous droits rservs.

ROLLBACK

Annuler des modifications jusqu' un marqueur


Crez un marqueur dans la transaction en cours l'aide
de l'instruction SAVEPOINT.
Procdez une annulation jusqu' ce marqueur l'aide
de l'instruction ROLLBACK TO SAVEPOINT.
UPDATE...
SAVEPOINT update_done;
INSERT...
ROLLBACK TO update_done;

9 - 30

Copyright 2007, Oracle. Tous droits rservs.

Traitement implicite des transactions


Une validation automatique a lieu dans les cas suivants :
Une instruction LDD est excute.
Une instruction LCD est excute.
Fermeture normale de SQL Developer ou de SQL*Plus,
sans excution explicite d'instructions COMMIT ou ROLLBACK.

Une annulation automatique se produit en cas d'arrt


anormal de SQL Developer ou de SQL*Plus, ou de
dfaillance du systme.

9 - 31

Copyright 2007, Oracle. Tous droits rservs.

Etat des donnes avant excution de l'instruction


COMMIT ou ROLLBACK
L'tat antrieur des donnes peut tre rcupr.
L'utilisateur actuel peut visualiser les rsultats des oprations
LMD l'aide de l'instruction SELECT.
Les autres utilisateurs ne peuvent pas afficher les rsultats
des instructions LMD excutes par l'utilisateur actuel.
Les lignes affectes sont verrouilles. Les autres utilisateurs
ne peuvent donc pas modifier les donnes de ces lignes.

9 - 33

Copyright 2007, Oracle. Tous droits rservs.

Etat des donnes aprs excution


de l'instruction COMMIT
Les modifications apportes aux donnes sont enregistres
dans la base.
L'tat antrieur des donnes est cras.
Tous les utilisateurs peuvent visualiser les rsultats.
Les verrous externes des lignes affectes sont librs.
Ces lignes peuvent alors tre manipules par les autres
utilisateurs.
Tous les savepoints sont effacs.

9 - 34

Copyright 2007, Oracle. Tous droits rservs.

Valider les donnes


Apportez les modifications :
DELETE FROM employees
WHERE employee_id = 99999;
INSERT INTO departments
VALUES (290, 'Corporate Tax', NULL, 1700);

Validez les modifications :


COMMIT;

9 - 35

Copyright 2007, Oracle. Tous droits rservs.

Etat des donnes aprs excution


de l'instruction ROLLBACK
Annulez toutes les modifications en attente l'aide de
l'instruction ROLLBACK :
Les modifications apportes aux donnes sont annules.
L'tat antrieur des donnes est restaur.
Les verrous externes des lignes affectes sont librs.
DELETE FROM copy_emp;
ROLLBACK ;

9 - 36

Copyright 2007, Oracle. Tous droits rservs.

Etat des donnes aprs excution de l'instruction


ROLLBACK : Exemple
DELETE FROM test;
25,000 rows deleted.
ROLLBACK;
Rollback complete.
DELETE FROM test WHERE
1 row deleted.

id = 100;

SELECT * FROM
test WHERE
No rows selected.

id = 100;

COMMIT;
Commit complete.

9 - 37

Copyright 2007, Oracle. Tous droits rservs.

Annulation au niveau instruction


Si une instruction LMD unique choue lors de l'excution,
seule cette instruction est annule.
Le serveur Oracle implmente un savepoint implicite.
Toutes les autres modifications sont conserves.
L'utilisateur doit terminer les transactions de faon explicite
l'aide d'une instruction COMMIT ou ROLLBACK.

9 - 38

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre
Ajouter de nouvelles lignes dans une table
Instruction INSERT

Modifier des donnes dans une table


Instruction UPDATE

Supprimer des lignes d'une table :


Instruction DELETE
Instruction TRUNCATE

Contrler les transactions de base de donnes l'aide


des instructions COMMIT, ROLLBACK et SAVEPOINT
Cohrence en lecture
Clause FOR UPDATE dans une instruction SELECT

9 - 39

Copyright 2007, Oracle. Tous droits rservs.

Cohrence en lecture
La cohrence en lecture garantit une vue cohrente
des donnes tout moment.
Les modifications apportes par un utilisateur n'entrent
pas en conflit avec les modifications apportes par un autre
utilisateur.
La cohrence en lecture garantit que, pour les mmes
donnes :
Les utilisateurs qui lisent n'attendent pas que ceux
qui crivent aient termin.
Les utilisateurs qui crivent n'attendent pas que ceux
qui lisent aient termin.
Les utilisateurs qui crivent doivent attendre que les autres
utilisateurs qui crivent aient termin.

9 - 40

Copyright 2007, Oracle. Tous droits rservs.

Implmenter la cohrence en lecture

Utilisateur A
UPDATE employees
SET
salary = 7000
WHERE last_name = 'Grant';

Blocs
de donnes

Segments
d'annulation

SELECT *
FROM userA.employees;

Image
cohrente
en lecture

Utilisateur B

9 - 41

Copyright 2007, Oracle. Tous droits rservs.

Donnes
modifies
et non
modifies
Avant
modification
("anciennes"
donnes)

Contenu du chapitre
Ajouter de nouvelles lignes dans une table
Instruction INSERT

Modifier des donnes dans une table


Instruction UPDATE

Supprimer des lignes d'une table :


Instruction DELETE
Instruction TRUNCATE

Contrler les transactions de base de donnes


l'aide des instructions COMMIT, ROLLBACK et SAVEPOINT
Cohrence en lecture
Clause FOR UPDATE dans une instruction SELECT

9 - 42

Copyright 2007, Oracle. Tous droits rservs.

Clause FOR UPDATE dans une instruction SELECT


Dans la table EMPLOYEES, verrouillez les lignes pour
lesquelles job_id = SA_REP.
SELECT employee_id, salary, commission_pct, job_id
FROM employees
WHERE job_id = 'SA_REP'
FOR UPDATE
ORDER BY employee_id;

Le verrou externe est libr uniquement lorsque vous


excutez une instruction ROLLBACK ou COMMIT.
Si l'instruction SELECT tente de verrouiller une ligne qui est
dj verrouille par un autre utilisateur, la base de donnes
attend que la ligne soit disponible pour renvoyer les rsultats
de l'instruction SELECT.
9 - 43

Copyright 2007, Oracle. Tous droits rservs.

Clause FOR UPDATE : Exemples


Dans une instruction SELECT, vous pouvez utiliser la clause
FOR UPDATE sur plusieurs tables.
SELECT e.employee_id, e.salary, e.commission_pct
FROM employees e JOIN departments d
USING (department_id)
WHERE job_id = 'ST_CLERK'
AND location_id = 1500
FOR UPDATE
ORDER BY e.employee_id;

Des lignes des tables EMPLOYEES et DEPARTMENTS sont


verrouilles.
Utilisez FOR UPDATE OF column_name pour qualifier la
colonne que vous avez l'intention de modifier. Seules les
lignes de cette table spcifique sont alors verrouilles.
9 - 44

Copyright 2007, Oracle. Tous droits rservs.

Synthse
Ce chapitre vous a permis d'apprendre utiliser les instructions
suivantes :
Fonction

Description

INSERT

Ajoute une nouvelle ligne la table

UPDATE

Modifie des lignes existantes de la table

DELETE

Supprime des lignes existantes de la table

TRUNCATE

Supprime toutes les lignes d'une table

COMMIT

Rend dfinitives toutes les modifications en attente

SAVEPOINT

Permet de procder une annulation (rollback) jusqu'au


marqueur savepoint

ROLLBACK

Annule toutes les modifications de donnes en attente

Clause FOR UPDATE


dans SELECT

Verrouille les lignes identifies par l'interrogation


SELECT

9 - 46

Copyright 2007, Oracle. Tous droits rservs.

Prsentation de l'exercice 9
Dans cet exercice, vous allez :
insrer des lignes dans une table
mettre jour et supprimer des lignes dans une table
contrler les transactions

9 - 47

Copyright 2007, Oracle. Tous droits rservs.

You might also like