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> |
| 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 |