Comment insérer des enregistrements dans plusieurs tables Oracle. ?
L'instruction DML INSERT ALL est utilisée pour ajouter des lignes dans plusieurs tables.
Les lignes peuvent être ajoutées avec des valeurs de données spécifiques, ou alors elles peuvent être créés à partir d'une sous-requête.
INSERT [ALL | FIRST]
WHEN condition THEN
INTO [ schéma ]. table [ (column1 [, column2 ]...) ]
VALUES ({ expr1 | DEFAULT } [, { expr2 | DEFAULT } ]...)
WHEN condition THEN
INTO [ schéma ]. table [ (column1 [, column2 ]...) ]
VALUES ({ expr1 | DEFAULT } [, { expr2 | DEFAULT } ]...)
...
SELECT column1 [, column2 ]...
FROM table;
|
C:\>SET ORACLE_SID=DBTEST C:\>SQLPLUS scott/tiger SQL*Plus: Release 10.2.0.1.0 - Production on Mer. Ao¹t 3 14:29:49 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connecté à : Oracle Database 10g Release 10.2.0.1.0 - Production SQL> CREATE TABLE SCOTT.VENTES ( ID_VENTES NUMBER(10), ID_MARQUES VARCHAR2(15), ID_VENDEUR NUMBER(5), PRIX NUMBER(10,2) ); Table créée. SQL> Insert into SCOTT.VENTES Values (1, 'RENAULT', 10, 18000.99); Insert into SCOTT.VENTES Values (2, 'RENAULT', 11, 16500); Insert into SCOTT.VENTES Values (3, 'VOLVO', 12, 24000); Insert into SCOTT.VENTES Values (4, 'AUDI', 10, 34000); Insert into SCOTT.VENTES Values (5, 'VOLVO', 13, 19000); SQL> COMMIT; Validation effectuée. SQL> CREATE TABLE SCOTT.VOLVO ( ID_VENDEUR NUMBER(5), PRIX NUMBER(10,2) ); Table créée. SQL> CREATE TABLE SCOTT.RENAULT ( ID_VENDEUR NUMBER(5), PRIX NUMBER(10,2) ); Table créée. SQL> CREATE TABLE SCOTT.AUDI ( ID_VENDEUR NUMBER(5), PRIX NUMBER(10,2) ); Table créée. SQL> SELECT * FROM SCOTT.VENTES; ID_VENTES ID_MARQUES ID_VENDEUR PRIX ---------- --------------- ---------- ---------- 1 RENAULT 10 18000,99 2 RENAULT 11 16500 3 VOLVO 12 24000 4 AUDI 10 34000 5 VOLVO 13 19000 |
Important :
- le nombre de champs déclaré dans l'instruction INSERT INTO doit être égale au nombre de champs déclaré dans VALUES.
- si tous les champs de la table sont déclarés dans VALUES alors il n'est pas obligatoire de déclarer les colonnes.
- Respectez les CONTRAINTES (Unicité, Not NULL, Check,...) définies sur la table sous peine d'échec avec l'instruction INSERT INTO.
Ici nous allons à partir de la table VENTES insérer des enregistrements dans les tables RENAULT, VOLVO, AUDI.
SQL> INSERT ALL 2 WHEN id_marques='RENAULT' THEN 3 INTO RENAULT(id_vendeur, prix) 4 VALUES(id_vendeur, prix) 5 WHEN id_marques='VOLVO' THEN 6 INTO VOLVO(id_vendeur, prix) 7 VALUES(id_vendeur, prix) 8 WHEN id_marques='AUDI' THEN 9 INTO AUDI(id_vendeur, prix) 10 VALUES(id_vendeur, prix) 11 SELECT id_marques ,id_vendeur, prix 12 FROM ventes; 5 ligne(s) créée(s). SQL> SELECT * FROM SCOTT.RENAULT; ID_VENDEUR PRIX ---------- ---------- 10 18000,99 11 16500 SQL> SELECT * FROM SCOTT.AUDI; ID_VENDEUR PRIX ---------- ---------- 10 34000 SQL> SELECT * FROM SCOTT.VOLVO; ID_VENDEUR PRIX ---------- ---------- 12 24000 13 19000 SQL> |
Si vous spécifiez ALL la valeur par défaut, Oracle évalue chaque clause WHEN indépendamment des résultats de l'évaluation de toute autre clause WHEN. Pour chaque clause WHEN dont
la condition est évaluée à vrai, la base de données exécute l'INSERT dans la liste de la clause.
Si vous spécifiez FIRST Oracle évalue chaque clause WHEN dans l'ordre dans lequel il apparaît dans la déclaration. A la première clause WHEN qui renvoie true, Oracle exécute la
clause INTO correspondante et saute ultérieurement les autres clauses pour la ligne donnée.
SQL> DROP TABLE SCOTT.VENTES CASCADE CONSTRAINTS PURGE; Table supprimée. SQL> DROP TABLE SCOTT.VOLVO CASCADE CONSTRAINTS PURGE; Table supprimée. SQL> DROP TABLE SCOTT.RENAULT CASCADE CONSTRAINTS PURGE; Table supprimée. SQL> DROP TABLE SCOTT.AUDI CASCADE CONSTRAINTS PURGE; Table supprimée. SQL> |
| Liens en rapport avec l'article et qui sont susceptibles de vous intéresser |
|
•
SQL INSERT INTO TABLE ORACLE • CREATE TABLE ORACLE • Update Table avec MERGE INTO • Instruction SQL SELECT FROM WHERE • Oracle SQL SOUS-REQUETES SELECT IN, ANY, ALL • Instruction SQL GROUP BY |