IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL*Loader Oracle Discussion :

Question sur SQLLOADER


Sujet :

SQL*Loader Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut Question sur SQLLOADER
    Bonjour tout le monde,

    J'ai une question en espérant qu'elle n'a pas été postée auquel cas je suis en train de créer un doublon et je vous demanderais de m'excuser d'avance.

    Droit au but :
    Je charge un fichier dans une table Oracle via sqlldr

    Ma question :
    Que se passe t'il si le nombre de champ de l'une des lignes du fichier est supérieur au nombre de champs de la table de destination ?

    Je n'ai pas de moyens techniques pour tenter l'expérience, pouvez-vous le faire pour moi ?

    Avec un fichier contenant des valeurs séparée par un ";"
    Chaque ligne doit se terminer par un ";"
    Qu'importe le contenu des champs : number, char, date....

    Merci pour votre aide.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Je crois que SQL*Loader fait partie de la distribution Oracle XE. L'installation d'Oracle XE créé une base prête à l'emploi pour SQL*Loader.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    euuuuuh désolé je ne vois pas où tu veux en venir ?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Si vous avez un PC sous Windows ou Linux, vous pouvez installer Oracle XE et utiliser SQL*Loader.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Ok merci, mais en fait j'aurais souhaité dans une urgence relative le faire faire par quelqu'un qui aurait déja le matos...
    En fait mon but étant de savoir s'il y aura un rejet des lignes dont le nombre de champs est supérieur au nombre de champ de la table.
    la ligne contiendrait 3 champs et la table 2 champs !
    Voilà si c'est possible que quelqu'un me fasse la manip ça serait super sympa.
    Merci pour l'information concernant Oracle XE

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Je viens de tester et cela ne pose pas de probleme si le fichier control est bien configuré.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    Script  de création table (data.sql) :
    
    create table test_loader
    (
       code int,
       nom varchar2(30),
       creation date
    );
    
    Script de contrôle (data.ctl):
    
     load data
              infile 'data.csv'
              into table test_loader
              fields terminated by ";" optionally enclosed by '"'          
              ( code, nom, creation )
    
    Fichier de données (data.csv):
    
    "1";"nom 1";"12/12/1967";"extra field 1";
    "2";"nom 2";"12/12/1956";"extra field 2";
    "3";"nom 3";"12/12/1923";"extra field 3";
    
    Exécution de SQL*Loader :
    
    c:\>sqlldr control=data.ctl userid=xxx/yyy@zzz
    
    
    Résultat :
    
    
    SQL> select * from test_loader;
    
          CODE NOM                            CREATION
    ---------- ------------------------------ --------
             1 nom 1                          12/12/67
             2 nom 2                          12/12/56
             3 nom 3                          12/12/23
    C'est tout bon !
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Merci Vicenzo (j'adore ce prénom!)

    cela voudrait dire que le 4ème champ est tronqué !?

    Pourquoi ne génère t'il pas de message d'erreur ? pas de contrôle du nombrede champs, ça me parait vraiment bizarre !!!

    comment peut-on alors effectuer un contrôle du nombre de champs entre le ligne du fichier et la table ?

    Merci.

  8. #8
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Si tu regardes le data.ctl, j'ai spécifie expressement les champs (3) à importer. Donc, les données surnuméraires ne sont pas gérées car superflues..

    Je n'y vois rien de choquant ! si le fichier de contrôle spécifie X champs, la seule erreur doit être si le nombre de champs du fichier est < à X.

    Pour preuve, voici le log de l'import (data.log) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     
    SQL*Loader: Release 10.2.0.1.0 - Production on Sam. Janv. 26 16:29:40 2008
     
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
     
    Fichier de contrôle :   data.ctl
    Fichier de données :      data.csv
      Fichier BAD :     data.bad
      Fichier DISCARD :  aucune spécification
     
     (Allouer tous les rebuts)
     
    Nombre à charger : ALL
    Nombre à sauter: 0
    Erreurs permises: 50
    Tableau de liens :     64 lignes, maximum de 256000 octets
    Continuation :    aucune spécification
    Chemin utilisé:      Classique
     
    Table TEST_LOADER, chargé à partir de chaque enregistrement physique.
    Option d'insertion en vigueur pour cette table : INSERT
     
       Nom de colonne               Position   Long.  Séparat. Encadrem. Type de données
    ------------------------------ ---------- ----- ---- ---- ---------------------
    CODE                                FIRST     *   ;  O(") CHARACTER            
    NOM                                  NEXT     *   ;  O(") CHARACTER            
    CREATION                             NEXT     *   ;  O(") CHARACTER            
     
     
    Table TEST_LOADER :
      Chargement réussi de 3 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.
     
     
    Espace affecté au tableau de liens :                  49536 octets(64 lignes)
    Octets de tampon de lecture : 1048576
     
    Nombre total d'enregistrements logiques ignorés :          0
    Nombre total d'enregistrements logiques lus :             3
    Nombre total d'enregistrements logiques rejetés :         0
    Nombre total d'enregistrements logiques mis au rebut :        0
     
    Le début de l'exécution a été effectué sur Sam. Janv. 26 16:29:40 2008
    La fin de l'exécution a été effectuée sur Sam. Janv. 26 16:29:40 2008
     
    Temps écoulé (ELAPSED) :     00:00:00.15
    Temps processeur (CPU) :    00:00:00.11
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Bonjour,

    Ok je vois plus clair maintenant !

    je donne plus de détails sur pourquoi j'ai posé cette question.

    J'effectue des tests de chargement de fichiers.
    Les fichiers sont émis depuis un système pour être chargé dans un autre système via sqlldr dans des tables oracle.

    Les développeurs du 2ème système me garantissent un rejet du fichier si la structure est érronée.
    Ce qui est le ca quand le nombre de champs d'une des lignes du fichier est supérieur au nombre de champs de la table de destination.

    Donc quand j'effectue le test, (sachant que je n'ai pas accés au système que via une interface), j'observe que les fichiers sont traitées et chargées normalement sauf les valeurs en plus.
    Et lorsque j'ai demandé la raion, on m'a dit que le sqlldr a atteint ses limites et qu'il effectuait un truncate des champs en plus !

    Ce qui n'est pas le cas, puisque (d'après ton explication), il charge le nombre de champs qu'on lui a demandé de charger et quand c'est fait, il passe à la ligne suivante.

    Ma dernière question :
    Comment peut on pousser le process à effectuer une comparaison de la structure des lignes avec celle de la table avant d'effectuer le charge
    ent ? Est-ce possible avec le sqlldr ? sinon avec quoi ?

    Merci par avance.

  10. #10
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Je suis pas un utilisateur régulier de sqlldr !

    Tu peux rechercher dans la doc de sqlldr et sur les paramètres du fichier de contrôle...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

Discussions similaires

  1. question sur SQLLOADER
    Par blin_d1 dans le forum SQL*Loader
    Réponses: 1
    Dernier message: 25/01/2008, 23h04
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo