Quantcast
Mercredi 3 août 2011 3 03 /08 /Août /2011 13:50

 

Insérer des lignes dans plusieurs tables avec la commande SQL INSERT ALL.

Comment insérer des enregistrements dans plusieurs tables Oracle. ?

Inserting into Multiple Tables.

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.

Syntaxe INSERT ALL multiple TABLES.

 
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;

sql insert all multiple tables

CREATION ENVIRONNEMENT DE TEST (tables Oracle).

 
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

 

Insertion d'enregistrement dans plusieurs table avec INSERT ALL.

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.

 

SUPPRESSION ENVIRONNEMENT DE TEST (tables Oracle).

 
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>

 

Haut de Page www.dba-ora.fr

 

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
Par Daniel Roesch - Publié dans : COMMANDES SQL DML-LMD
Ecrire un commentaire - Voir les 0 commentaires
Retour à l'accueil

Oracle Sql et administration

Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés