Quantcast

SQL LOADER

Dimanche 14 août 2011 7 14 /08 /Août /2011 15:54

 

Importer un CSV dans Tables Multiple avec SQL Loader.

Comment charger un fichier dans plusieurs Tables Oracle avec SQL Loader. ?

Chargement Multiple de données délimitées avec SQL Loader.

Nous allons voir ici avec sqlldr comment, à partir d'un fichier de données unique, on importe dans plusieurs tables Oracle avec plusieurs clause INTO TABLE.

1 - Chargement SQLLDR dans 2 Tables.

Dans l'exemple de chargement ci-dessous, nous n'utiliserons pas d'Input Data File, nous allons mettre les données à charger directement dans le Fichier de contrôle après la Clause BEGINDATA pour une meilleure visibilité de l'exemple.

 

Structure des 2 tables cibles.

 
CREATE TABLE SCOTT.EMP
(
  EMPNO     NUMBER(4)                               NULL,
  ENAME     VARCHAR2(10 BYTE)                       NULL,
  JOB       VARCHAR2(9 BYTE)                        NULL,
  MGR       NUMBER(4)                               NULL,
  HIREDATE  DATE                                    NULL,
  SAL       NUMBER(7,2)                             NULL,
  COMM      NUMBER(7,2)                             NULL,
  DEPTNO    NUMBER(2)                               NULL
)
TABLESPACE USERS;
 
CREATE TABLE SCOTT.BONUS
(
  ENAME  VARCHAR2(10 BYTE)                          NULL,
  JOB    VARCHAR2(10 BYTE)                          NULL,
  SAL    NUMBER                                     NULL,
  COMM   NUMBER                                     NULL
)
TABLESPACE USERS;

 

Structure du Control File SQLLDR ( INTO MULTIPLE TABLE ).

 
OPTIONS (DIRECT=TRUE)
    LOAD DATA
    INFILE *
          BADFILE 'dba-ora.bad'
          DISCARDFILE 'dba-ora.dsc'
    TRUNCATE
       INTO TABLE SCOTT."EMP"
       FIELDS terminated by ";" Optionally enclosed by '"'
       (
           empno    INTEGER EXTERNAL,
           ename    CHAR "UPPER(:ename)",
           job      CHAR "RTRIM(:job)",
           mgr      INTEGER EXTERNAL NULLIF (mgr="NULL"),
           hiredate DATE "MM/DD/YYYY HH24:MI:SS",
           sal      DECIMAL EXTERNAL,
           comm     DECIMAL EXTERNAL NULLIF (comm="NULL"),
           deptno   INTEGER EXTERNAL OPTIONALLY ENCLOSED BY "'"
         )
       INTO TABLE SCOTT."BONUS"
       FIELDS terminated by ";" Optionally enclosed by '"'
       (
           empno    FILLER POSITION(1),
           ename    CHAR "UPPER(:ename)",
           job      CHAR "RTRIM(:job)",
           mgr      FILLER ,
           hiredate FILLER ,
           sal      DECIMAL EXTERNAL,
           comm     DECIMAL EXTERNAL NULLIF (comm="NULL"),
           deptno   FILLER
         )
BEGINDATA
7369;smith;CLERK ;7902;;800,50;;30
7499;"Allen";"SALESMAN ";NULL;"02/20/1981 00:00:00";1600;300;'30'
7521;"WARD";"SALESMAN";7698;"02/22/1981 00:00:00";1250;500,56;30
7566;"JONES";"MANAGER  ";7839;"04/02/1981 00:00:00";2975;NULL;'30'
7654;"MARTIN";"SALESMAN";7698;"09/28/1981 00:00:00";1250;1400;30
  • Nous avons deux clauses INTO TABLE.
  • L'option TRUNCATE est placée en haut par défaut. L'option s'applique pour les deux tables. On peut définir deux options differentes, dans ce cas on place l'option TRUNCATE juste après la clause INTO TABLE.
  • INTO TABLE SCOTT."EMP"
    TRUNCATE
    ...
    INTO TABLE SCOTT."BONUS"
    TRUNCATE
    
  • Dans la deuxièmes clauses INTO TABLE, nous désactivons les champs qui ne correspondent pas à notre structure de la table Bonus avec le type FILLER.
  • Vous remarquerez le mot clé POSITION avec la valeur 1 sur la première colonne. Ceci est obligatoire, pour réinitialiser le pointeur dans SQLLOADER. Ici la valeur est 1 car nous voulons qu'il commence la lecture à partir du début de la ligne. Si vous omettez ce mot clé, la deuxième table ne sera pas mise à jour.

 

Chargement avec la commande SQLLDR.

ici le fichier de contrôle dba-ora.ctl est dans le dossier C:\SQLLOADER

 
C:\SQLLOADER>SQLLDR scott/tiger CONTROL=dba-ora.ctl

SQL*Loader: Release 10.2.0.1.0 - Production on Dim. Août 14 16:49:32 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Chargement terminé - calcul enregistrement(s) logique(s) 5.

C:\SQLLOADER>
 
C:\SQLLOADER>SQLPLUS scott/tiger

SQL*Plus: Release 10.2.0.1.0 - Production on Dim. Août 14 16:50:10 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connecté à :
Oracle Database 10g Release 10.2.0.1.0 - Production

SQL> SET LINESIZE 130
SQL> SELECT * FROM emp;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902                 800,5                    30
      7499 ALLEN      SALESMAN             20/02/1981       1600        300         30
      7521 WARD       SALESMAN        7698 22/02/1981       1250     500,56         30
      7566 JONES      MANAGER         7839 02/04/1981       2975                    30
      7654 MARTIN     SALESMAN        7698 28/09/1981       1250       1400         30

SQL> SELECT * FROM bonus;

ENAME      JOB               SAL       COMM
---------- ---------- ---------- ----------
SMITH      CLERK           800,5
ALLEN      SALESMAN         1600        300
WARD       SALESMAN         1250     500,56
JONES      MANAGER          2975
MARTIN     SALESMAN         1250       1400

SQL>

 

Vérification du fichier LOG

 
C:\SQLLOADER>TYPE dba-ora.log

SQL*Loader: Release 10.2.0.1.0 - Production on Dim. Ao¹t 14 16:55:10 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Fichier de contrôle :   dba-ora.ctl
Fichier de données :    dba-ora.ctl
  Fichier BAD :     dba-ora.bad
  Fichier DISCARD : dba-ora.dsc
 (Allouer tous les rebuts)

Nombre à charger : ALL
Nombre à sauter: 0
Erreurs permises: 50
Continuation :    aucune spécification
Chemin utilisé:   Direct

Table SCOTT."EMP", chargé à partir de chaque enregistrement physique.
Option d'insertion en vigueur pour cette table : TRUNCATE
....
...
..
Table SCOTT."BONUS", chargé à partir de chaque enregistrement physique.
Option d'insertion en vigueur pour cette table : TRUNCATE

.....
...
..
Table SCOTT."EMP" :
  Chargement réussi de 5 Lignes.
  0 Lignes chargement impossible dû à  des erreurs de données.
  0 Lignes chargement impossible car échec de toutes les clauses WHEN.
  0 Lignes chargement impossible car tous les champs étaient non renseignés.

Table SCOTT."BONUS" :
  Chargement réussi de 5 Lignes.
  0 Lignes chargement impossible dû à des erreurs de données.
  0 Lignes chargement impossible car échec de toutes les clauses WHEN.
  0 Lignes chargement impossible car tous les champs étaient non renseignés.

Nombre total d'enregistrements logiques ignorés :          0
Nombre total d'enregistrements logiques lus :             5
Nombre total d'enregistrements logiques rejetés :         0
Nombre total d'enregistrements logiques mis au rebut :        0

C:\SQLLOADER>

Haut de Page www.dba-ora.fr

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Description SQL Loader
• Oracle SQL LOADER / SQLLDR Load Data
• Importer CSV dans Oracle avec SQL loader
Par Daniel Roesch - Publié dans : SQL LOADER
Ecrire un commentaire - Voir les 0 commentaires
Dimanche 14 août 2011 7 14 /08 /Août /2011 00:49

 

Importer un fichier CSV avec SQL Loader.

Comment charger un CSV dans Oracle avec SQL Loader. ?

Chargement de données délimitées avec SQL Loader.

Les Données délimitées sont séparés par des chaînes de caractères appelée délimiteurs.
Certains champs, notamment les champs de texte, peuvent être ENCLOSED par des " ".
Des champs peuvent contenir des espaces en début et à la fin.

1 - Chargement avec la Clause BEGINDATA (sans Input Data File).

On peut mettre les données à charger directement dans le Fichier de contrôle après la Clause BEGINDATA.

 

Structure table cible.

 
CREATE TABLE SCOTT.EMP
(
  EMPNO     NUMBER(4)                               NULL,
  ENAME     VARCHAR2(10 BYTE)                       NULL,
  JOB       VARCHAR2(9 BYTE)                        NULL,
  MGR       NUMBER(4)                               NULL,
  HIREDATE  DATE                                    NULL,
  SAL       NUMBER(7,2)                             NULL,
  COMM      NUMBER(7,2)                             NULL,
  DEPTNO    NUMBER(2)                               NULL
)
TABLESPACE USERS;

 

Structure Control File SQLLDR

 
OPTIONS (DIRECT=TRUE)
    LOAD DATA
    INFILE *
          BADFILE 'dba-ora.bad'
          DISCARDFILE 'dba-ora.dsc'
    TRUNCATE INTO TABLE SCOTT."EMP"
    WHEN (deptno = '30')
    FIELDS terminated by ";" Optionally enclosed by '"'
    (
        empno    INTEGER EXTERNAL,
        ename    CHAR "UPPER(:ename)",
        job      CHAR "RTRIM(:job)",
        mgr      INTEGER EXTERNAL NULLIF (mgr="NULL"),
        hiredate DATE "MM/DD/YYYY HH24:MI:SS",
        sal      DECIMAL EXTERNAL,
        comm     DECIMAL EXTERNAL NULLIF (comm="NULL"),
        deptno   INTEGER EXTERNAL OPTIONALLY ENCLOSED BY "'"
      )
BEGINDATA
7369;smith;CLERK ;7902;;800,50;;30
7499;"Allen";"SALESMAN ";NULL;"02/20/1981 00:00:00";1600;300;'30'
7521;"WARD";"SALESMAN";7698;"02/22/1981 00:00:00";1250;500,56;30
7566;"JONES";"MANAGER  ";7839;"04/02/1981 00:00:00";2975;NULL;'30'
7654;"MARTIN";"SALESMAN";7698;"09/28/1981 00:00:00";1250;1400;30
  • OPTIONS (DIRECT=TRUE)
  • Direct path = TRUE insère les données dans de nouveau Extents. Les blocs de données sont directement écrit dans les fichiers de données de la base sans passer par le Buffer Cache. Il y a des restrictions quand à l'utilisation de cette Option dans certains cas.

  • LOAD DATA INFILE *
  • On met un astérisque à la clause INFILE car le fichier à charger est inclus dans le fichier de contrôle lui même. Sinon nous aurions par exemple INFILE 'c:\sqlloader\dba-ora.dat'

  • BADFILE 'dba-ora.bad'
  • Si des erreurs de chargements se produisent un fichier BADFILE dba-ora.bad est créé.

  • DISCARDFILE 'dba-ora.dsc'
  • Si vous avez spécifié une clause WHEN et si des enregistrements ne satisfont pas cette clause alors un fichier DISCARDFILE dba-ora.dsc est créé.

  • FIELDS terminated by ";" Optionally enclosed by '"'
  • Nous mettons cette clause FIELDS par défaut pour tous les champs du fichier à charger. Nous pouvons ajuster au cas par cas ensuite dans la déclaration du champ. Par défaut les champs ont des séparateurs (;) Point Virgule et sont quelquefois entre (").

  • CHAR "UPPER(:ename)"
  • Utilisation de la fonction UPPER pour convertir la colonne ename en Majuscule.

  • CHAR "RTRIM(:job)"
  • Utilisation de la fonction RTRIM pour supprimer les espaces de droite sur la colonne job.

  • INTEGER EXTERNAL NULLIF (mgr="NULL")
  • Utilisation de la fonction NULLIF qui permet de remplacer la chaîne texte "NULL" par une valeur NULL.

  • INTEGER EXTERNAL OPTIONALLY ENCLOSED BY "'"
  • Pour la dernière colonne deptno nous lui indiquons que cette dernière peut être ENCLOSED par des '.

  • BEGINDATA
  • Marque le début de la zone de données à charger dans la base de données.

 

Déclenchement du chargement en ligne de commande avec SQLLDR.

ici le fichier de contrôle dba-ora.ctl est dans le dossier C:\SQLLOADER

 
C:\SQLLOADER>SQLLDR scott/tiger CONTROL=dba-ora.ctl

SQL*Loader: Release 10.2.0.1.0 - Production on Dim. Août 14 03:46:10 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Chargement terminé - calcul enregistrement(s) logique(s) 5.

C:\SQLLOADER>
 
C:\SQLLOADER>SQLPLUS scott/tiger

SQL*Plus: Release 10.2.0.1.0 - Production on Dim. Août 14 03:56:32 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connecté à :
Oracle Database 10g Release 10.2.0.1.0 - Production

SQL> SET LINESIZE 140
SQL> SELECT * FROM emp;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902                 800,5                    30
      7499 ALLEN      SALESMAN             20/02/1981       1600        300         30
      7521 WARD       SALESMAN        7698 22/02/1981       1250     500,56         30
      7566 JONES      MANAGER         7839 02/04/1981       2975                    30
      7654 MARTIN     SALESMAN        7698 28/09/1981       1250       1400         30

SQL>

 

Vérification du fichier LOG

 
C:\SQLLOADER>TYPE dba-ora.log

SQL*Loader: Release 10.2.0.1.0 - Production on Dim. Ao¹t 14 03:46:10 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Fichier de contrôle :   dba-ora.ctl
Fichier de données :    dba-ora.ctl
  Fichier BAD :     dba-ora.bad
  Fichier DISCARD : dba-ora.dsc
 (Allouer tous les rebuts)

Nombre à charger : ALL
Nombre à sauter: 0
Erreurs permises: 50
Continuation :    aucune spécification
Chemin utilisé:   Direct

Table SCOTT."EMP", chargé quand DEPTNO = 0X3330(caractère '30')
Option d'insertion en vigueur pour cette table : TRUNCATE
............
........
....
Table SCOTT."EMP" :
Chargement réussi de 5 Lignes.
  
Nombre total d'enregistrements logiques lus :             5
Nombre total d'enregistrements logiques rejetés :         0
Nombre total d'enregistrements logiques mis au rebut :    0

C:\SQLLOADER>

Haut de Page www.dba-ora.fr

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Description SQL Loader
• Oracle SQL LOADER / SQLLDR Load Data
Par Daniel Roesch - Publié dans : SQL LOADER
Ecrire un commentaire - Voir les 0 commentaires

Oracle Sql et administration

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