T ECHNOLOGIES O RACLE Manipulation des données © sebvita.com
Objectifs En suivant ce cours, vous serez capable : De décrire tous les ordres DML Dinsérer des lignes dans une table De les modifier ou supprimer De contrôler les transactions © sebvita.com
Lordre INSERT © sebvita.com
Présentation Un ordre DML est exécuté lors : – De lajout de lignes dans une table – De la modification de lignes – De la suppression de lignes Une transaction est un ensemble dordres DML qui constituent une unité logique de travail © sebvita.com
Lordre INSERT Ajouter une ligne à une table Insérer une nouvelle ligne dans la table DEPARTMENTS Nouvelle ligne DEPARTMENTS © sebvita.com
Syntaxe Ajouter une nouvelle ligne avec la clause INSERT : Avec cette syntaxe on insère une ligne à la fois INSERT INTO table [(column [, column...])] VALUES (value [, value...]); © sebvita.com
Exemple basique Insérer une ligne avec une valeur pour chaque colonne Lister les valeurs dans lordre des colonnes de la table Éventuellement, lister les colonnes dans la clause Mettre les chaînes de caractères et les dates entre quotes simples INSERT INTO departments(department_id, department_name, manager_id,location_id) VALUES (70, 'Public Relations', 100, 1700); 1 row created. © sebvita.com
Exemple avec des valeurs NULL Implicite : Ne pas mettre les colonnes Explicite : Écrire NULL dans les valeurs INSERT INTO departments (department_id, department_name ) VALUES (30, 'Purchasing'); INSERT INTO departments VALUES (100, 'Finance', NULL, NULL); 1 row created. 1 row created © sebvita.com
Exemple avec des fonctions La fonction SYSDATE retourne les date et heure courantes INSERT INTO employees (employee_id, first_name, last_name, , phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id) VALUES (113, 'Louis', 'Popp', 'LPOPP', ' ', SYSDATE, 'AC_ACCOUNT', 6900, NULL, 205, 100); 1 row created. © sebvita.com
Exemple avec des dates Ajouter un nouvel employé Vérifier lajout INSERT INTO employees VALUES (114, 'Den', 'Raphealy', 'DRAPHEAL', ' ', TO_DATE('FEB 3, 1999', 'MON DD, YYYY'), 'AC_ACCOUNT', 11000, NULL, 100, 30); 1 row created. © sebvita.com
Exemple de création de script Utiliser les variables de substitution INSERT INTO departments (department_id, department_name, location_id) VALUES (&department_id,'&department_name',&location ); 1 row created. © sebvita.com
Copier les lignes dune autre table Écrire l INSERT avec une sous-requête Ne pas utiliser de clause VALUES Faire correspondre les colonnes de l INSERT et de la sous-requête INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE '%REP%'; 4 rows created. © sebvita.com
V OUS AVEZ DES QUESTIONS ?
Lordre UPDATE © sebvita.com
Changer les données dune table EMPLOYEES Mettre à jour la table EMPLOYEES : © sebvita.com
Syntaxe Modifier des lignes existantes avec UPDATE Peut mettre à jour plusieurs lignes en même temps UPDATE table SET column = value [, column = value,...] [WHERE condition]; © sebvita.com
Exemples Lignes spécifiques avec la clause WHERE Toutes les lignes de la table UPDATE employees SET department_id = 70 WHERE employee_id = 113; UPDATE copy_emp SET department_id = 110; 1 row updated. 22 row updated. © sebvita.com
Exemple avec sous-requêtes Mettre à jour le métier et le salaire de lemployé 114 avec les données de lemployé 205 UPDATE employees SET job_id = (SELECT job_id FROM employees WHERE employee_id = 205), salary = (SELECT salary FROM employees WHERE employee_id = 205) WHERE employee_id = 114; 1 row updated. © sebvita.com
Utiliser une autre table Utiliser les données dune autre table grâce aux sous-requêtes UPDATE copy_emp SET department_id = (SELECT department_id FROM employees WHERE employee_id = 100) WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 200); 1 row updated. © sebvita.com
DEFAULT Utiliser la valeur par défaut dune colonne Peut-être utilisé dans les INSERT et UPDATE INSERT INTO deptm3 (department_id, department_name, manager_id) VALUES (300, 'Engineering', DEFAULT); UPDATE deptm3 SET manager_id = DEFAULT WHERE department_id = 10; © sebvita.com
V OUS AVEZ DES QUESTIONS ?
Les ordres DELETE et TRUNCATE © sebvita.com
Supprimer les lignes dune table DEPARTMENTS Supprimer une ligne de la table DEPARTMENTS : © sebvita.com
Syntaxe Supprimer des lignes existantes dune table DELETE [FROM] table [WHERE condition]; © sebvita.com
Exemples Lignes spécifiques avec la clause WHERE Toutes les lignes de la table DELETE FROM departments WHERE department_name = 'Finance'; DELETE FROM copy_emp; 1 row deleted. 22 rows deleted. © sebvita.com
Exemple avec sous-requêtes Supprimer des lignes dune table en fonction des données dune autre DELETE FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name LIKE '%Public%'); 1 row deleted. © sebvita.com
Lordre TRUNCATE Supprimer toutes les lignes dune table Est un DDL et non un DML : ne peut pas être annulé aussi facilement Syntaxe : Exemple : TRUNCATE TABLE table_name; TRUNCATE TABLE copy_emp; © sebvita.com
V OUS AVEZ DES QUESTIONS ?
Lordre MERGE © sebvita.com
Présentation Permet une insertion ou mise à jour conditionnelle Lance un UPDATE si la ligne existe, un INSERT dans le cas contraire : – Évite les mises à jour séparées – Simplifie lutilisation et améliore les performances – Très utile dans les applications de datawarehouse © sebvita.com
Syntaxe Lordre MERGE permet un UPDATE ou un INSERT selon une condition MERGE INTO table_name table_alias USING (table | view | sub_query) alias ON (join condition) WHEN MATCHED THEN UPDATE SET col1 = col_val1, col2 = col2_val WHEN NOT MATCHED THEN INSERT (column_list) VALUES (column_values); © sebvita.com
Exemple Insérer ou modifier les lignes dans COPY_EMP pour correspondre à la table EMPLOYEES MERGE INTO copy_emp c USING employees e ON (c.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET c.first_name = e.first_name, c.last_name = e.last_name,... c.department_id = e.department_id WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id, e.first_name, e.last_name, e. , e.phone_number, e.hire_date, e.job_id, e.salary, e.commission_pct, e.manager_id, e.department_id); © sebvita.com
Exemple SQL> SELECT * 2 FROM COPY_EMP; no rows selected MERGE INTO copy_emp c USING employees e ON (c.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET... WHEN NOT MATCHED THEN INSERT VALUES...; SELECT * FROM COPY_EMP; 20 rows selected. © sebvita.com
V OUS AVEZ DES QUESTIONS ?
Contrôle des transactions © sebvita.com
Présentation Une transaction de base de données consiste en un des points suivants : – Des ordres DML – Un ordre DDL – Un ordre DCL © sebvita.com
Présentation Une transaction commence avec le premier DML Se termine avec : – Un COMMIT ou ROLLBACK – Un DDL ou DCL (commit automatique) – Lutilisateur quitte iSQL*Plus – Le système plante © sebvita.com
Présentation Les avantages des transactions : – Assurer la consistance des données – Prévisualiser les changements avant de les rendre permanents – Grouper les opérations logiques © sebvita.com
Chronologie DELETE INSERT UPDATE INSERT ROLLBACK to SAVEPOINT B ROLLBACK to SAVEPOINT A ROLLBACK SAVEPOINT B SAVEPOINT A Transaction COMMIT Temps © sebvita.com
Revenir en arrière Créer un point de retour dans une transaction avec SAVEPOINT Revenir en arrière avec ROLLBACK TO SAVEPOINT INSERT... ROLLBACK TO update_done ; UPDATE... SAVEPOINT update_done ; Savepoint created. Rollback complete. © sebvita.com
Revenir en arrière Un commit automatique a lieu : – Lors dun DDL – Lors dun DCL – Lorsquon quitte iSQL*Plus sans COMMIT ou ROLLBACK Un rollback automatique a lieu lorsquon quitte de manière anormale © sebvita.com
État des données Avant un COMMIT ou un ROLLBACK : – Létat des données peut être retrouvé – Lutilisateur en cours peut prévisualiser les données – Les autres utilisateurs ne peuvent pas voir les changements – Les lignes affectées sont verrouillées ; les autres utilisateurs ne peuvent pas les modifier © sebvita.com
État des données Après un COMMIT – Les changements sont rendus permanents – Létat précédent des données est perdu – Tous les utilisateurs peuvent voir le résultat – Les verrous sont relâchés – Tous les points de retour sont effacés © sebvita.com
Exemple Changement des données Validation des données DELETE FROM employees WHERE employee_id = 99999; COMMIT ; INSERT INTO departments VALUES (290, 'Corporate Tax', NULL, 1700); 1 row deleted. 1 row created. Commit complete. © sebvita.com
État des données Après un ROLLBACK – Les changements sont annulés – Létat précédent est restauré – Les verrous sur les lignes sont relâchés DELETE FROM copy_emp; ROLLBACK ; 22 rows deleted. Rollback complete. © sebvita.com
Exemple DELETE FROM test; ROLLBACK; DELETE FROM test WHERE id = 100; SELECT * FROM test WHERE id = 100; COMMIT; 25,000 rows deleted. Rollback complete. 1 row deleted. No row selected. Commit complete. © sebvita.com
Rollback dune requête Si un seul DML plante pendant lexécution, seul ce DML est annulé Le serveur Oracle implémente un SAVEPOINT implicite Tous les autres changements sont maintenus Lutilisateur peut terminer explicitement avec un COMMIT ou un ROLLBACK © sebvita.com
Consistance des données La lecture consistante des données garantie la consistance des résultats à tout moment Les changements dun utilisateur ninfluent pas ceux dun autre utilisateur Elle assure également que pour des mêmes données : – Les lecteurs nattendent pas les « écrivains » – Les « écrivains » nattendent pas les lecteurs © sebvita.com
Lecture consistante User B User A UPDATE employees SET salary = 7000 WHERE last_name = 'Grant'; SELECT * FROM userA.employees; © sebvita.com
V OUS AVEZ DES QUESTIONS ?
Manipulation des données © sebvita.com
Résumé Les transactions Les ordres DML Ordres DDL © sebvita.com La lecture consistante
Ressources © sebvita.com