Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
9 août 2011 2 09 /08 /août /2011 14:11

 

SQL Loader et le Control File SQLLDR.

C'est quoi le control file SQL Loader. ?
A quoi sert le control file SQL Loader. ?

Description Control File SQL Loader.

Ce fichier décrit la structure des données à charger dans Oracle.
Le fichier de contrôle indique si le format est délimité, retour chariot, si une colonne est de taille fixe ou délimitée par un caractère.
Il précise les types de données, des longueurs, précision, jeu de caractères, structure d'enregistrement.
Le fichier de contrôle de l'outil SQLLDR est simplement un fichier interface (Protocol) qui permet de dire, je charge Quoi, Comment, Où, et sous quelle condition.

Attention, pour SQL LOADER lorsque l'on parle de CONTROL FILE, il ne s'agit en aucun cas des CONTROL FILES de la base de données Oracle.

 

On peut décomposer le CONTROL FILE en quatres grandes parties:

  • La clause OPTIONS.
    Les options peuvent être en ligne de commande via SQLLDR ou dans le Fichier de Contrôle.
  • La clause LOAD DATA..
    La clause LOAD DATA marque le début de chargement.
  • La clause INTO TABLE.
    Identifie une ou plusieurs tables de chargement.
  • La Partie BEGINDATA.
    Les DATA à charger peuvent être dans un fichier Data ou dans le Fichier de Contrôle.

 

SQL Loader LOAD DATA INFILE.

 

SYNTAXE GÉNÉRIQUE LOAD DATA.

 
 {LOAD | CONTINUE_LOAD} [DATA] [CHARACTERSET character_set] [INFILE clause [INFILE clause...]] [INSERT | APPEND | REPLACE | TRUNCATE] INTO TABLE clause [INTO TABLE clause...] [WHEN conditions] [FIELDS [delimiter clause]] [TRAILING [NULLCOLS] [SKIP skip_count] (field list) [BEGINDATA] 

 

Exemple Control file SQLLDR.

 
 -- Exemple Control File www.dba-ora.fr OPTIONS (DIRECT=FALSE) LOAD DATA INFILE * BADFILE 'dba-ora.bad' DISCARDFILE 'dba-ora.dsc' TRUNCATE PRESERVE BLANKS INTO TABLE SCOTT."EMP" WHEN (deptno = '20') FIELDS terminated by ";" Optionally enclosed by '"' TRAILING NULLCOLS ( empno INTEGER EXTERNAL NULLIF (empno="NULL"), ename CHAR "UPPER(:ename)", job CHAR "RTRIM(:job)", mgr INTEGER EXTERNAL NULLIF (mgr="NULL"), hiredate DATE "MM/DD/YYYY HH24:MI:SS" NULLIF (hiredate="NULL"), sal DECIMAL EXTERNAL NULLIF (sal="NULL"), comm DECIMAL EXTERNAL NULLIF (comm="NULL"), deptno INTEGER EXTERNAL NULLIF (deptno="NULL") ) BEGINDATA 7369;"smith";"CLERK ";7902;"12/17/1980 00:00:00";800,50;;20 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;20 7654;"MARTIN";"SALESMAN";7698;"09/28/1981 00:00:00";1250;1400;30 

 

SQLLDR OPTIONS dans Control File.

La commande OPTIONS doit être spécifiée avant la commande LOAD DATA.

 

OPTIONS (param1=value [,param2=value])

  • BINDSIZE = n
  • COLUMNARRAYROWS = n
  • DIRECT = {TRUE | FALSE}
  • ERRORS = n
  • LOAD = n
  • MULTITHREADING = {TRUE | FALSE}
  • PARALLEL = {TRUE | FALSE}
  • READSIZE = n
  • RESUMABLE = {TRUE | FALSE}
  • RESUMABLE_NAME = 'text string'
  • RESUMABLE_TIMEOUT = n
  • ROWS = n
  • SILENT = {HEADER | FEEDBACK | ERRORS | DISCARDS | PARTITIONS | ALL}
  • SKIP = n
  • SKIP_INDEX_MAINTENANCE = {TRUE | FALSE}
  • SKIP_UNUSABLE_INDEXES = {TRUE | FALSE}
  • STREAMSIZE = n

 

SQLLDR LOAD DATA INFILE.

La clause LOAD DATA est généralement la première commande du Fichier de contrôle, elle indique le début d'un chargement de données.
La clause INFILE spécifie le nom du fichier contenant les données à charger. Nous mettons INFILE * lorsque les données à charger dans la base sont directement dans le fichier de contrôle après la clause BEGINDATA.

 

INFILE {filename | *}
[ BADFILE bad_file_name ]
[ DISCARDFILE discard_file_name]
[{ DISCARDS | DISCARDMAX } integer]

  • INFILE *
  • Clause INFILE lorsque les données à charger sont dans le Fichier Contrôle.
  • INFILE dba-ora.dat
  • Indique le nom du fichier data à charger dans la base de données.
  • INFILE 'c:\sqlloader\dba-ora.dat'
  • Indique le chemin complet du fichier data à charger. Mettre le Path entre ' '


  • 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éé.

 

SQLLDR INTO TABLE CLAUSE.

La clause INTO TABLE permet de spécifier la méthode de chargement (INSERT, APPEND, REPLACE, ou TRUNCATE).
C'est ici que l'on spécifie la table de destination.
La méthode par défaut de chargement dans SQL LOADER est INSERT.

 

{ INSERT | REPLACE | TRUNCATE | APPEND } INTO TABLE table_name

  • INSERT
  • La méthode INSERT est la méthode par défaut de SQL Loader. La table doit être vide.
  • REPLACE
  • La méthode REPLACE supprime (DELETE) toutes les lignes de la table avant de charger le fichier Data.
  • TRUNCATE
  • La méthode TRUNCATE est la plus rapide (en comparaison à REPLACE) toutes les lignes de la table sont supprimées. Pensez à désactiver les contraintes d'intégrité référentielle sinon SQL Loader renvoie des erreurs.
  • APPEND
  • La méthode APPEND ajoute les nouvelles lignes à la table. Si les données existent ou n'existent pas, les nouvelles lignes sont chargées .

 

SQLLDR FIELDS DATATYPE.

  • CHAR
  • Informe SQL Loader que le champ du fichier DATA est un champ texte.
  •  
     CHAR [(length)] [ENCLOSED [BY] [{'strg' | X'hex_val'}][AND {'strg' | X'hex_val'}] | TERMINATED [BY] {WHITESPACE|X'hex_val' | 'strg'} [[OPTIONALLY] ENCLOSED [BY] [{'strg' | X'hex_val'}][AND {'strg' | X'hex_val'}]]] 

     

  • INTEGER, DECIMAL, FLOAT, ZONED EXTERNAL
  • Informe SQL Loader que le champ du fichier DATA est un type numérique.
  •  
     {INTEGER | DECIMAL | FLOAT | ZONED} EXTERNAL[(length[,scale])] [ENCLOSED [BY] [{'strg' | X'hex_val'}][AND {'strg' | X'hex_val'}] | TERMINATED [BY] {WHITESPACE|X'hex_val' | 'strg'} [[OPTIONALLY] ENCLOSED [BY] [{'strg' | X'hex_val'}][AND {'strg' | X'hex_val'}]]] 
     123.45 -- ZONED(5,2) 123.45 -- DECIMAL(5,2) 12345 -- ZONED(5) 12345 -- DECIMAL(5) -123.45 -- ZONED(5,2) -123.45 -- DECIMAL(5,2) 

     

  • DATE
  • Informe SQL Loader que le champ du fichier DATA est un type caractère qui représente une Date.
  •  
     DATE [EXTERNAL] [(length)] ["format"] [ENCLOSED [BY] [{'strg' | X'hex_val'}][AND {'strg' | X'hex_val'}] | TERMINATED [BY] {WHITESPACE|X'hex_val' | 'strg'} [[OPTIONALLY] ENCLOSED [BY] [{'strg' | X'hex_val'}][AND {'strg' | X'hex_val'}]]] 
     08/26/2011 -- DATE "mm/dd/yyyy" 08/26/11 -- DATE "mm/dd/yy" "Jan 26, 2011", -- DATE "mon dd, yyyy" TERMINATED BY "," ENCLOSED BY '"' 

     

  • VARCHARC
  • Informe SQL Loader que le champ est une chaîne de caractères précédée par une série de chiffres représentant la longueur de la chaîne..
  •  
     VARCHARC(length_bytes) 
     005Paris -- VARCHARC(3) 010Versailles -- VARCHARC(3) 03Pau -- VARCHARC(2) 

     

 

SQLLDR BEGINDATA.

  • BEGINDATA
  • Informe SQL Loader de la fin de la commande LOAD lorsque les données à charger sont dans le fichier de contrôle. Les données à charger commencent immédiatement après la clause BEGINDATA.
    Si les données à charger sont dans un autre fichier, la commande BEGINDATA ne doit pas apparaître dans le fichier de contrôle.

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Description SQL Loader

Partager cet article

Repost 0
Published by Daniel Roesch - dans SQL LOADER
commenter cet article

commentaires