Copyright  Oracle Corporation, 1998. Tous droits réservés.
12
Manipulation des Données
12-2 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Objectifs
A la fin de ce chapitre, vous saurez :
• Décrire chaque ordre du LMD
• Insérer des lignes dans une table
• Mettre à jour des lignes dans une table
• Supprimer des lignes d'une table
• Contrôler les transactions
12-3 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Langage de Manipulation des
Données
• Un ordre du LMD est exécuté lorsque :
– Vous ajoutez des lignes à une table
– Vous modifiez des lignes existantes
dans une table
– Vous supprimez des lignes d'une
table
• Une transaction est un ensemble
d'ordres du LMD formant une unité de
travail logique.
12-4 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Ajout d'une Nouvelle Ligne dans
une Table
DEPT
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Nouvelle ligne
50 DEVELOPMENT DETROIT
DEPT
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
"…insérer une
nouvelle ligne dans la
table DEPT …"
50 DEVELOPMENT DETROIT
12-5 Copyright  Oracle Corporation, 1998. Tous droits réservés.
L'Ordre INSERT
• L'ordre INSERT permet d'ajouter de
nouvelles lignes dans une table.
• Cette syntaxe n'insère qu'une seule
ligne à la fois.
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
12-6 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Insertion de Nouvelles Lignes
• Insérez une nouvelle ligne en précisant
une valeur pour chaque colonne.
• Eventuellement, énumérez les colonnes
dans la clause INSERT.
• Indiquez les valeurs dans l'ordre par
défaut des colonnes dans la table.
• Placez les valeurs de type caractère et
date entre simples quotes.
SQL> INSERT INTO dept (deptno, dname, loc)
2 VALUES (50, 'DEVELOPMENT', 'DETROIT');
1 row created.
12-7 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Insertion de Lignes Contenant
des Valeurs NULL
• Méthode implicite : ne spécifiez pas la
colonne dans la liste.
SQL> INSERT INTO dept (deptno, dname )
2 VALUES (60, 'MIS');
1 row created.
• Méthode explicite : spécifiez le mot-clé
NULL.
SQL> INSERT INTO dept
2 VALUES (70, 'FINANCE', NULL);
1 row created.
12-8 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Insertion de Valeurs Spéciales
La fonction SYSDATE renvoie la date et
l'heure courantes.
SQL> INSERT INTO emp (empno, ename, job,
2 mgr, hiredate, sal, comm,
3 deptno)
4 VALUES (7196, 'GREEN', 'SALESMAN',
5 7782, SYSDATE, 2000, NULL,
6 10);
1 row created.
12-9 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Insertion de Dates dans un
Format Spécifique
• Ajout d'un nouvel employé.
SQL> INSERT INTO emp
2 VALUES (2296,'AROMANO','SALESMAN',7782,
3 TO_DATE('FEB 3,97', 'MON DD,YY'),
4 1300, NULL, 10);
1 row created.
• Vérification de l'ajout.
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ------- -------- ---- --------- ---- ----- -----
2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10
12-10 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Insertion de Valeurs au Moyen
de Variables de Substitution
Création d'un script interactif au moyen
de paramètres de substitution SQL*Plus.
SQL> INSERT INTO dept (deptno, dname, loc)
2 VALUES (&department_id,
3 '&department_name', '&location');
Enter value for department_id: 80
Enter value for department_name: EDUCATION
Enter value for location: ATLANTA
1 row created.
12-11 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Création d'un Script Contenant
des Messages Personnalisés
• ACCEPT stocke la valeur dans une
variable.
• PROMPT affiche votre texte.
ACCEPT department_id PROMPT 'Please enter the -
department number:'
ACCEPT department_name PROMPT 'Please enter -
the department name:'
ACCEPT location PROMPT 'Please enter the -
location:'
INSERT INTO dept (deptno, dname, loc)
VALUES (&department_id, '&department_name',
‘&location’);
12-12 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Copie de Lignes d'une Autre Table
• Ecrivez votre ordre INSERT en
spécifiant une sous-interrogation.
• N'utilisez pas la clause VALUES.
• Le nombre de colonnes de la clause
INSERT doit correspondre à celui de la
sous-interrogation.
SQL> INSERT INTO managers(id, name, salary, hiredate)
2 SELECT empno, ename, sal, hiredate
3 FROM emp
4 WHERE job = 'MANAGER';
3 rows created.
12-13 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Modification des Données
d'une Table
EMP
"…modifier une
ligne
de la table EMP…"
EMP
EMPNO ENAME JOB ... DEPTNO
7839 KING PRESIDENT 10
7698 BLAKE MANAGER 30
7782 CLARK MANAGER 10
7566 JONES MANAGER 20
...
20
EMPNO ENAME JOB ... DEPTNO
7839 KING PRESIDENT 10
7698 BLAKE MANAGER 30
7782 CLARK MANAGER 10
7566 JONES MANAGER 20
...
12-14 Copyright  Oracle Corporation, 1998. Tous droits réservés.
L'Ordre UPDATE
• Utilisez l'ordre UPDATE pour modifier
des lignes existantes.
• Si nécessaire, vous pouvez modifier
plusieurs lignes à la fois.
UPDATE table
SET column = value [, column = value]
[WHERE condition];
12-15 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Modification de Lignes
d'une Table
• La clause WHERE permet de modifier
une ou plusieurs lignes spécifiques.
• Si vous omettez la clause WHERE,
toutes les lignes sont modifiées.
SQL> UPDATE emp
2 SET deptno = 20
3 WHERE empno = 7782;
1 row updated.
SQL> UPDATE employee
2 SET deptno = 20;
14 rows updated.
12-16 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Modification avec une
Sous-Interrogation Multi-colonne
SQL> UPDATE emp
2 SET (job, deptno) =
3 (SELECT job, deptno
4 FROM emp
5 WHERE empno = 7499)
6 WHERE empno = 7698;
1 row updated.
Modifier le poste et le n° de département de
l'employé 7698 à l'identique de l'employé
7499.
12-17 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Modification de Lignes en
Fonction d'une Autre Table
Utilisez des sous-interrogations dans l'ordre
UPDATE pour modifier des lignes d'une table
à l'aide de valeurs d'une autre table.
SQL> UPDATE employee
2 SET deptno = (SELECT deptno
3 FROM emp
4 WHERE empno = 7788)
5 WHERE job = (SELECT job
6 FROM emp
7 WHERE empno = 7788);
2 rows updated.
12-18 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Ordre UPDATE Synchronisé
Syntaxe
Utilisez une Sous-Interrogation
Synchronisée pour mettre à jour les lignes
d'une table basée sur des lignes d'une
autre table.
UPDATE table1 alias1
SET column = (SELECT expression
FROM table2 alias2
WHERE alias1.column = alias2.column);
12-19 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Ordre UPDATE Synchronisé
Exemple
Ajouter une nouvelle colonne à la table
emp pour stocker le nom du département,
puis remplissez la table à l’aide d’un
UPDATE Synchronisé .
UPDATE emp e
SET dname = (SELECT dname
FROM dept d
WHERE d.deptno = e.deptno);
12-20 Copyright  Oracle Corporation, 1998. Tous droits réservés.
UPDATE emp
*
ERROR at line 1:
ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK)
violated - parent key not found
SQL> UPDATE emp
2 SET deptno = 55
3 WHERE deptno = 10;
Modification de Lignes :
Erreur de Contrainte d'Intégrité
12-21 Copyright  Oracle Corporation, 1998. Tous droits réservés.
"…supprime une ligne
de la table DEPT…"
Suppression d'une Ligne d'une Table
DEPT
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 DEVELOPMENT DETROIT
60 MIS
...
DEPT
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
60 MIS
...
12-22 Copyright  Oracle Corporation, 1998. Tous droits réservés.
L'Ordre DELETE
Vous pouvez supprimer des lignes d'une
table au moyen de l'ordre DELETE.
DELETE [FROM] table
[WHERE condition];
12-23 Copyright  Oracle Corporation, 1998. Tous droits réservés.
• La clause WHERE permet de supprimer
une ou plusieurs lignes spécifiques.
• Si vous omettez la clause WHERE,
toutes les lignes sont supprimées.
Suppression de Lignes d'une Table
SQL> DELETE FROM department
2 WHERE dname = 'DEVELOPMENT';
1 row deleted.
SQL> DELETE FROM department;
4 rows deleted.
12-24 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Suppression de Lignes en Faisant
Référence à une Autre Table
Utilisez des sous-interrogations dans
l'ordre DELETE pour supprimer des lignes
dont certaines valeurs correspondent à
celles d'une autre table.
SQL> DELETE FROM employee
2 WHERE deptno =
3 (SELECT deptno
4 FROM dept
5 WHERE dname ='SALES');
6 rows deleted.
12-25 Copyright  Oracle Corporation, 1998. Tous droits réservés.
SQL> DELETE FROM table1 alias1
2 WHERE column operator
3 (SELECT expression
3 FROM table2 alias2
4 WHERE alias1.column = alias2.column);
Syntaxe
Utilisez une Sous-Interrogation
Synchronisée pour supprimer
uniquement les lignes existant également
dans une autre table.
Ordre DELETE Synchronisé
12-26 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Ordre DELETE Synchronisé
Exemple
SQL> DELETE FROM emp_history eh
WHERE empid = (SELECT empno
FROM emp e
WHERE e.empno = eh.empid);
Supprimer les employés de la table
emp_history qui appartiennent aussi à la
table emp .
12-27 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Suppression de Lignes :
Erreur de Contrainte d'Intégrité
SQL> DELETE FROM dept
2 WHERE deptno = 10;
DELETE FROM dept
*
ERROR at line 1:
ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK)
violated - child record found
12-28 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Transactions de Base de Données
Une transaction se compose des
éléments suivants :
• Ensemble d'ordres du LMD effectuant
une modification cohérente des
données
• Un ordre du LDD
• Un ordre du LCD
12-29 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Transactions de Base de Données
Une transaction :
• Commence à l'exécution du premier
ordre SQL
• Se termine par l'un des événements
suivants :
– COMMIT ou ROLLBACK
– Exécution d'un ordre LDD ou LCD
(validation automatique)
– Fin de session utilisateur
– Panne du système
12-30 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Avantages des Ordres
COMMIT et ROLLBACK
• Garantit la cohérence des données
• Possibilité d'afficher le résultat des
modifications avant qu'elles ne soient
définitives
• Regroupement logique d'opérations
12-31 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Contrôle des Transactions
DELETE
Transaction
Savepoint A
ROLLBACK to Savepoint B
DELETE
Savepoint BCOMMIT
INSERTUPDATE
ROLLBACK to Savepoint A
INSERTUPDATEINSERT
ROLLBACK
INSERT
12-32 Copyright  Oracle Corporation, 1998. Tous droits réservés.
• Une validation automatique a lieu dans
les situations suivantes :
– Exécution d'un ordre du LDD
– Exécution d'un ordre du LCD
– Sortie normale de SQL*Plus, sans
ordre COMMIT ou ROLLBACK
explicite
• Il se produit un rollback automatique en
cas de sortie anormale de SQL*Plus ou
d'une panne du système
Traitement Implicite des Transactions
12-33 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Etat des Données Avant
COMMIT ou ROLLBACK
• Il est possible de restaurer l'état précédent
des données.
• L'utilisateur courant peut afficher le résultat
des opérations du LMD au moyen de l'ordre
SELECT.
• Les résultats des ordres du LMD exécutés
par l'utilisateur courant ne peuvent pas être
affichés par d'autres utilisateurs.
• Les lignes concernées sont verrouillées.
Aucun autre utilisateur ne peut les modifier.
12-34 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Etat des Données Après COMMIT
• Les modifications des données dans la
base sont définitives.
• L'état précédent des données est
irrémédiablement perdu.
• Tous les utilisateurs peuvent voir le
résultat des modifications.
• Les lignes verrouillées sont libérées et
peuvent de nouveau être manipulées par
d'autres utilisateurs.
• Tous les savepoints sont effacés.
12-35 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Validation de Données
SQL> UPDATE emp
2 SET deptno = 10
3 WHERE empno = 7782;
1 row updated.
• Effectuez les modifications.
• Validez les modifications.
SQL> COMMIT;
Commit complete.
12-36 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Etat des Données Après ROLLBACK
L'ordre ROLLBACK rejette toutes les
modifications de données en instance.
• Les modifications sont annulées.
• L'état précédent des données est
restauré.
• Les lignes verrouillées sont libérées.
SQL> DELETE FROM employee;
14 rows deleted.
SQL> ROLLBACK;
Rollback complete.
12-37 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Annulation des Modifications
Jusqu'à une Etiquette
• Posez une étiquette dans la transaction
courante au moyen de l'ordre
SAVEPOINT.
• Annulez la transaction jusqu'à cette
étiquette en utilisant l'ordre ROLLBACK
TO SAVEPOINT.
SQL> UPDATE...
SQL> SAVEPOINT update_done;
Savepoint created.
SQL> INSERT...
SQL> ROLLBACK TO update_done;
Rollback complete.
12-38 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Rollback au Niveau Ordre
• Si un seul ordre du LMD dans la
transaction échoue, seul cet ordre est
annulé.
• Oracle8 met en œuvre un savepoint
implicite.
• Toutes les autres modifications sont
conservées.
• L'utilisateur doit terminer explicitement
les transactions en exécutant un ordre
COMMIT ou ROLLBACK.
12-39 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Lecture Cohérente
• La lecture cohérente garantit à tout
moment une vue homogène des
données.
• Les modifications effectuées par un
utilisateur n'entrent pas en conflit avec
celles d'un autre utilisateur.
• Sur les mêmes données, garantit que :
– la lecture ignore les écritures en
cours
– l'écriture ne perturbe pas la lecture
12-40 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Implémentation de la
Lecture Cohérente
update emp
set sal = 2000
where ename =
'SCOTT'
Blocs de
données
Rollback
segments
select *
from emp
données
modifiées
et non
modifiées
'anciennes'
données
avant modif.
Utilisateur A
Utilisateur B
Lit une
image
cohérente
12-41 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Verrouillage
Les verrous Oracle8 :
• Evitent les risques de destruction des
données en cas de transactions
simultanées
• N'exigent aucune intervention de
l'utilisateur
• S'appliquent au niveau de restriction le
plus bas
• Sont actifs durant toute la transaction
• Fonctionnent en deux modes de base :
– Exclusif
– Partagé
12-42 Copyright  Oracle Corporation, 1998. Tous droits réservés.
Résumé
Description
Ajoute une nouvelle ligne dans une table
Modifie des lignes dans une table
Supprime des lignes d'une table
Valide toutes les modifications de données
en instance
Permet un rollback partiel
Annule toutes les modifications de données
en instance
Ordre
INSERT
UPDATE
DELETE
COMMIT
SAVEPOINT
ROLLBACK

12 fr

  • 1.
    Copyright  OracleCorporation, 1998. Tous droits réservés. 12 Manipulation des Données
  • 2.
    12-2 Copyright Oracle Corporation, 1998. Tous droits réservés. Objectifs A la fin de ce chapitre, vous saurez : • Décrire chaque ordre du LMD • Insérer des lignes dans une table • Mettre à jour des lignes dans une table • Supprimer des lignes d'une table • Contrôler les transactions
  • 3.
    12-3 Copyright Oracle Corporation, 1998. Tous droits réservés. Langage de Manipulation des Données • Un ordre du LMD est exécuté lorsque : – Vous ajoutez des lignes à une table – Vous modifiez des lignes existantes dans une table – Vous supprimez des lignes d'une table • Une transaction est un ensemble d'ordres du LMD formant une unité de travail logique.
  • 4.
    12-4 Copyright Oracle Corporation, 1998. Tous droits réservés. Ajout d'une Nouvelle Ligne dans une Table DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON Nouvelle ligne 50 DEVELOPMENT DETROIT DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON "…insérer une nouvelle ligne dans la table DEPT …" 50 DEVELOPMENT DETROIT
  • 5.
    12-5 Copyright Oracle Corporation, 1998. Tous droits réservés. L'Ordre INSERT • L'ordre INSERT permet d'ajouter de nouvelles lignes dans une table. • Cette syntaxe n'insère qu'une seule ligne à la fois. INSERT INTO table [(column [, column...])] VALUES (value [, value...]);
  • 6.
    12-6 Copyright Oracle Corporation, 1998. Tous droits réservés. Insertion de Nouvelles Lignes • Insérez une nouvelle ligne en précisant une valeur pour chaque colonne. • Eventuellement, énumérez les colonnes dans la clause INSERT. • Indiquez les valeurs dans l'ordre par défaut des colonnes dans la table. • Placez les valeurs de type caractère et date entre simples quotes. SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (50, 'DEVELOPMENT', 'DETROIT'); 1 row created.
  • 7.
    12-7 Copyright Oracle Corporation, 1998. Tous droits réservés. Insertion de Lignes Contenant des Valeurs NULL • Méthode implicite : ne spécifiez pas la colonne dans la liste. SQL> INSERT INTO dept (deptno, dname ) 2 VALUES (60, 'MIS'); 1 row created. • Méthode explicite : spécifiez le mot-clé NULL. SQL> INSERT INTO dept 2 VALUES (70, 'FINANCE', NULL); 1 row created.
  • 8.
    12-8 Copyright Oracle Corporation, 1998. Tous droits réservés. Insertion de Valeurs Spéciales La fonction SYSDATE renvoie la date et l'heure courantes. SQL> INSERT INTO emp (empno, ename, job, 2 mgr, hiredate, sal, comm, 3 deptno) 4 VALUES (7196, 'GREEN', 'SALESMAN', 5 7782, SYSDATE, 2000, NULL, 6 10); 1 row created.
  • 9.
    12-9 Copyright Oracle Corporation, 1998. Tous droits réservés. Insertion de Dates dans un Format Spécifique • Ajout d'un nouvel employé. SQL> INSERT INTO emp 2 VALUES (2296,'AROMANO','SALESMAN',7782, 3 TO_DATE('FEB 3,97', 'MON DD,YY'), 4 1300, NULL, 10); 1 row created. • Vérification de l'ajout. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------- -------- ---- --------- ---- ----- ----- 2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10
  • 10.
    12-10 Copyright Oracle Corporation, 1998. Tous droits réservés. Insertion de Valeurs au Moyen de Variables de Substitution Création d'un script interactif au moyen de paramètres de substitution SQL*Plus. SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (&department_id, 3 '&department_name', '&location'); Enter value for department_id: 80 Enter value for department_name: EDUCATION Enter value for location: ATLANTA 1 row created.
  • 11.
    12-11 Copyright Oracle Corporation, 1998. Tous droits réservés. Création d'un Script Contenant des Messages Personnalisés • ACCEPT stocke la valeur dans une variable. • PROMPT affiche votre texte. ACCEPT department_id PROMPT 'Please enter the - department number:' ACCEPT department_name PROMPT 'Please enter - the department name:' ACCEPT location PROMPT 'Please enter the - location:' INSERT INTO dept (deptno, dname, loc) VALUES (&department_id, '&department_name', ‘&location’);
  • 12.
    12-12 Copyright Oracle Corporation, 1998. Tous droits réservés. Copie de Lignes d'une Autre Table • Ecrivez votre ordre INSERT en spécifiant une sous-interrogation. • N'utilisez pas la clause VALUES. • Le nombre de colonnes de la clause INSERT doit correspondre à celui de la sous-interrogation. SQL> INSERT INTO managers(id, name, salary, hiredate) 2 SELECT empno, ename, sal, hiredate 3 FROM emp 4 WHERE job = 'MANAGER'; 3 rows created.
  • 13.
    12-13 Copyright Oracle Corporation, 1998. Tous droits réservés. Modification des Données d'une Table EMP "…modifier une ligne de la table EMP…" EMP EMPNO ENAME JOB ... DEPTNO 7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ... 20 EMPNO ENAME JOB ... DEPTNO 7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...
  • 14.
    12-14 Copyright Oracle Corporation, 1998. Tous droits réservés. L'Ordre UPDATE • Utilisez l'ordre UPDATE pour modifier des lignes existantes. • Si nécessaire, vous pouvez modifier plusieurs lignes à la fois. UPDATE table SET column = value [, column = value] [WHERE condition];
  • 15.
    12-15 Copyright Oracle Corporation, 1998. Tous droits réservés. Modification de Lignes d'une Table • La clause WHERE permet de modifier une ou plusieurs lignes spécifiques. • Si vous omettez la clause WHERE, toutes les lignes sont modifiées. SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782; 1 row updated. SQL> UPDATE employee 2 SET deptno = 20; 14 rows updated.
  • 16.
    12-16 Copyright Oracle Corporation, 1998. Tous droits réservés. Modification avec une Sous-Interrogation Multi-colonne SQL> UPDATE emp 2 SET (job, deptno) = 3 (SELECT job, deptno 4 FROM emp 5 WHERE empno = 7499) 6 WHERE empno = 7698; 1 row updated. Modifier le poste et le n° de département de l'employé 7698 à l'identique de l'employé 7499.
  • 17.
    12-17 Copyright Oracle Corporation, 1998. Tous droits réservés. Modification de Lignes en Fonction d'une Autre Table Utilisez des sous-interrogations dans l'ordre UPDATE pour modifier des lignes d'une table à l'aide de valeurs d'une autre table. SQL> UPDATE employee 2 SET deptno = (SELECT deptno 3 FROM emp 4 WHERE empno = 7788) 5 WHERE job = (SELECT job 6 FROM emp 7 WHERE empno = 7788); 2 rows updated.
  • 18.
    12-18 Copyright Oracle Corporation, 1998. Tous droits réservés. Ordre UPDATE Synchronisé Syntaxe Utilisez une Sous-Interrogation Synchronisée pour mettre à jour les lignes d'une table basée sur des lignes d'une autre table. UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);
  • 19.
    12-19 Copyright Oracle Corporation, 1998. Tous droits réservés. Ordre UPDATE Synchronisé Exemple Ajouter une nouvelle colonne à la table emp pour stocker le nom du département, puis remplissez la table à l’aide d’un UPDATE Synchronisé . UPDATE emp e SET dname = (SELECT dname FROM dept d WHERE d.deptno = e.deptno);
  • 20.
    12-20 Copyright Oracle Corporation, 1998. Tous droits réservés. UPDATE emp * ERROR at line 1: ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK) violated - parent key not found SQL> UPDATE emp 2 SET deptno = 55 3 WHERE deptno = 10; Modification de Lignes : Erreur de Contrainte d'Intégrité
  • 21.
    12-21 Copyright Oracle Corporation, 1998. Tous droits réservés. "…supprime une ligne de la table DEPT…" Suppression d'une Ligne d'une Table DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 DEVELOPMENT DETROIT 60 MIS ... DEPT DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 60 MIS ...
  • 22.
    12-22 Copyright Oracle Corporation, 1998. Tous droits réservés. L'Ordre DELETE Vous pouvez supprimer des lignes d'une table au moyen de l'ordre DELETE. DELETE [FROM] table [WHERE condition];
  • 23.
    12-23 Copyright Oracle Corporation, 1998. Tous droits réservés. • La clause WHERE permet de supprimer une ou plusieurs lignes spécifiques. • Si vous omettez la clause WHERE, toutes les lignes sont supprimées. Suppression de Lignes d'une Table SQL> DELETE FROM department 2 WHERE dname = 'DEVELOPMENT'; 1 row deleted. SQL> DELETE FROM department; 4 rows deleted.
  • 24.
    12-24 Copyright Oracle Corporation, 1998. Tous droits réservés. Suppression de Lignes en Faisant Référence à une Autre Table Utilisez des sous-interrogations dans l'ordre DELETE pour supprimer des lignes dont certaines valeurs correspondent à celles d'une autre table. SQL> DELETE FROM employee 2 WHERE deptno = 3 (SELECT deptno 4 FROM dept 5 WHERE dname ='SALES'); 6 rows deleted.
  • 25.
    12-25 Copyright Oracle Corporation, 1998. Tous droits réservés. SQL> DELETE FROM table1 alias1 2 WHERE column operator 3 (SELECT expression 3 FROM table2 alias2 4 WHERE alias1.column = alias2.column); Syntaxe Utilisez une Sous-Interrogation Synchronisée pour supprimer uniquement les lignes existant également dans une autre table. Ordre DELETE Synchronisé
  • 26.
    12-26 Copyright Oracle Corporation, 1998. Tous droits réservés. Ordre DELETE Synchronisé Exemple SQL> DELETE FROM emp_history eh WHERE empid = (SELECT empno FROM emp e WHERE e.empno = eh.empid); Supprimer les employés de la table emp_history qui appartiennent aussi à la table emp .
  • 27.
    12-27 Copyright Oracle Corporation, 1998. Tous droits réservés. Suppression de Lignes : Erreur de Contrainte d'Intégrité SQL> DELETE FROM dept 2 WHERE deptno = 10; DELETE FROM dept * ERROR at line 1: ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated - child record found
  • 28.
    12-28 Copyright Oracle Corporation, 1998. Tous droits réservés. Transactions de Base de Données Une transaction se compose des éléments suivants : • Ensemble d'ordres du LMD effectuant une modification cohérente des données • Un ordre du LDD • Un ordre du LCD
  • 29.
    12-29 Copyright Oracle Corporation, 1998. Tous droits réservés. Transactions de Base de Données Une transaction : • Commence à l'exécution du premier ordre SQL • Se termine par l'un des événements suivants : – COMMIT ou ROLLBACK – Exécution d'un ordre LDD ou LCD (validation automatique) – Fin de session utilisateur – Panne du système
  • 30.
    12-30 Copyright Oracle Corporation, 1998. Tous droits réservés. Avantages des Ordres COMMIT et ROLLBACK • Garantit la cohérence des données • Possibilité d'afficher le résultat des modifications avant qu'elles ne soient définitives • Regroupement logique d'opérations
  • 31.
    12-31 Copyright Oracle Corporation, 1998. Tous droits réservés. Contrôle des Transactions DELETE Transaction Savepoint A ROLLBACK to Savepoint B DELETE Savepoint BCOMMIT INSERTUPDATE ROLLBACK to Savepoint A INSERTUPDATEINSERT ROLLBACK INSERT
  • 32.
    12-32 Copyright Oracle Corporation, 1998. Tous droits réservés. • Une validation automatique a lieu dans les situations suivantes : – Exécution d'un ordre du LDD – Exécution d'un ordre du LCD – Sortie normale de SQL*Plus, sans ordre COMMIT ou ROLLBACK explicite • Il se produit un rollback automatique en cas de sortie anormale de SQL*Plus ou d'une panne du système Traitement Implicite des Transactions
  • 33.
    12-33 Copyright Oracle Corporation, 1998. Tous droits réservés. Etat des Données Avant COMMIT ou ROLLBACK • Il est possible de restaurer l'état précédent des données. • L'utilisateur courant peut afficher le résultat des opérations du LMD au moyen de l'ordre SELECT. • Les résultats des ordres du LMD exécutés par l'utilisateur courant ne peuvent pas être affichés par d'autres utilisateurs. • Les lignes concernées sont verrouillées. Aucun autre utilisateur ne peut les modifier.
  • 34.
    12-34 Copyright Oracle Corporation, 1998. Tous droits réservés. Etat des Données Après COMMIT • Les modifications des données dans la base sont définitives. • L'état précédent des données est irrémédiablement perdu. • Tous les utilisateurs peuvent voir le résultat des modifications. • Les lignes verrouillées sont libérées et peuvent de nouveau être manipulées par d'autres utilisateurs. • Tous les savepoints sont effacés.
  • 35.
    12-35 Copyright Oracle Corporation, 1998. Tous droits réservés. Validation de Données SQL> UPDATE emp 2 SET deptno = 10 3 WHERE empno = 7782; 1 row updated. • Effectuez les modifications. • Validez les modifications. SQL> COMMIT; Commit complete.
  • 36.
    12-36 Copyright Oracle Corporation, 1998. Tous droits réservés. Etat des Données Après ROLLBACK L'ordre ROLLBACK rejette toutes les modifications de données en instance. • Les modifications sont annulées. • L'état précédent des données est restauré. • Les lignes verrouillées sont libérées. SQL> DELETE FROM employee; 14 rows deleted. SQL> ROLLBACK; Rollback complete.
  • 37.
    12-37 Copyright Oracle Corporation, 1998. Tous droits réservés. Annulation des Modifications Jusqu'à une Etiquette • Posez une étiquette dans la transaction courante au moyen de l'ordre SAVEPOINT. • Annulez la transaction jusqu'à cette étiquette en utilisant l'ordre ROLLBACK TO SAVEPOINT. SQL> UPDATE... SQL> SAVEPOINT update_done; Savepoint created. SQL> INSERT... SQL> ROLLBACK TO update_done; Rollback complete.
  • 38.
    12-38 Copyright Oracle Corporation, 1998. Tous droits réservés. Rollback au Niveau Ordre • Si un seul ordre du LMD dans la transaction échoue, seul cet ordre est annulé. • Oracle8 met en œuvre un savepoint implicite. • Toutes les autres modifications sont conservées. • L'utilisateur doit terminer explicitement les transactions en exécutant un ordre COMMIT ou ROLLBACK.
  • 39.
    12-39 Copyright Oracle Corporation, 1998. Tous droits réservés. Lecture Cohérente • La lecture cohérente garantit à tout moment une vue homogène des données. • Les modifications effectuées par un utilisateur n'entrent pas en conflit avec celles d'un autre utilisateur. • Sur les mêmes données, garantit que : – la lecture ignore les écritures en cours – l'écriture ne perturbe pas la lecture
  • 40.
    12-40 Copyright Oracle Corporation, 1998. Tous droits réservés. Implémentation de la Lecture Cohérente update emp set sal = 2000 where ename = 'SCOTT' Blocs de données Rollback segments select * from emp données modifiées et non modifiées 'anciennes' données avant modif. Utilisateur A Utilisateur B Lit une image cohérente
  • 41.
    12-41 Copyright Oracle Corporation, 1998. Tous droits réservés. Verrouillage Les verrous Oracle8 : • Evitent les risques de destruction des données en cas de transactions simultanées • N'exigent aucune intervention de l'utilisateur • S'appliquent au niveau de restriction le plus bas • Sont actifs durant toute la transaction • Fonctionnent en deux modes de base : – Exclusif – Partagé
  • 42.
    12-42 Copyright Oracle Corporation, 1998. Tous droits réservés. Résumé Description Ajoute une nouvelle ligne dans une table Modifie des lignes dans une table Supprime des lignes d'une table Valide toutes les modifications de données en instance Permet un rollback partiel Annule toutes les modifications de données en instance Ordre INSERT UPDATE DELETE COMMIT SAVEPOINT ROLLBACK