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 Oracle Discussion :

Casse tête avec SQl*Loader


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 26
    Par défaut Casse tête avec SQl*Loader
    Bonjour tt le monde, j'ai besoin de vôtre aide qur un problème urgent avec SQL*Loader.
    Le datafile est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    000 
    001 
    001 
    002 
    003 
    003 
    002 
    003 
    003
    Le fichier de côntrole est le suivant:
    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
    LOAD DATA
    	        INFILE 'BOQ.txt'
    	        BADFILE 'ulcase5.bad'
    	        DISCARDFILE 'ulcase5.dsc'
     
    	        truncate
     
    	        INTO TABLE PB_PR_OFFER_TEMP
    	        WHEN type='000'
    	        (
     
    	        	TYPE 		POSITION(1:3)	INTEGER EXTERNAL,
    	        )
     
    	        INTO TABLE PB_PR_OFFER_TEMP
    	        WHEN type='001'
    	        (
     
    	        	TYPE 		POSITION(1:3)	INTEGER EXTERNAL,
    	        )
     
    	        INTO TABLE PB_PR_OFFER_TEMP
    	        WHEN type='002'
    	        (
     
    	        	TYPE 		POSITION(1:3)	INTEGER EXTERNAL,
    	        )
     
    	        INTO TABLE PB_PR_OFFER_TEMP
    	        WHEN type='003'
    	        (
     
    	        	TYPE 		POSITION(1:3)	INTEGER EXTERNAL,
    	        )
    les donneés son insérées correctement dans la base de données mais l'ordre n'est pas comme celui du fichier 'datafile'.

    La table stocke les données de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    000 
    001 
    001 
    002 
    002 
    003 
    003 
    003 
    003
    les elements indéxés par 000 sont les premiers, puis 001, 002 et enfin 003.
    L'ordre est primordiale pour moi. Merci.

  2. #2
    Membre averti
    Inscrit en
    Février 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 26
    Par défaut
    personne ne veut m'aider!!!!!

    c'est vraiment urgent pour moi.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 138
    Par défaut
    L'ordre d'insertion et de lecture est différent pour oracle. Il va écrire dans le premier trou qu'il va trouver et lire de facon séquentielle. C'est évident que ton ordre ne sera pas respecté.

    Je trouve bizarre que tu aies nécéssairement besoin d'un ordre basé sur autre chose qu'une colonne triable. Sans questionner ce principe douteux, je te dirais de te créer une colonne de plus qui va contenir ton ordre de tri et une variable de package qui va contenir un compteur et un trigger sur la table en insertion. Ceci te permettra d'incrémenter la valeur à chaque exécution du trigger before row et d'assigner la valeur du compteur à ta colonne de tri, au fur et à mesure que tu vas insérer et dans l'ordre. Tu n'aura qu'a faire un order by sur cette colonne après.

    Chose certaine, tu ne peux pas te fier à l'ordre d'insertion pour calculer l'ordre de lecture des données dans les tables.

  4. #4
    Membre averti
    Inscrit en
    Février 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 26
    Par défaut
    merci pour ta réponse.

    apparemment il n'y a pas une solution dans sql loader.

    Je vais essayer de modifier mon fichier d'entrée et mettre l'ordre de chaque enregistrement.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 138
    Par défaut
    J'espère que ton fichier d'entrée n'a pas 50 millions d'enregistrements!!!

  6. #6
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 176
    Par défaut
    et si tu rajoute une sequence en plus dans ta table en entree, style :

    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
    LOAD DATA
    	        INFILE 'BOQ.txt'
    	        BADFILE 'ulcase5.bad'
    	        DISCARDFILE 'ulcase5.dsc'
     
    	        truncate
     
    	        INTO TABLE PB_PR_OFFER_TEMP
    	        WHEN type='000'
    	        (
                            seq_table                    SEQUENCE(1,1),
    	        	TYPE 		POSITION(1:3)	INTEGER EXTERNAL
    	        )
     
    	        INTO TABLE PB_PR_OFFER_TEMP
    	        WHEN type='001'
    	        (
                            seq_table                    SEQUENCE(1,1),
    	        	TYPE 		POSITION(1:3)	INTEGER EXTERNAL
    	        )
     
    	        INTO TABLE PB_PR_OFFER_TEMP
    	        WHEN type='002'
    	        (
     
                            seq_table                    SEQUENCE(1,1),
    	        	TYPE 		POSITION(1:3)	INTEGER EXTERNAL
    	        )
     
    	        INTO TABLE PB_PR_OFFER_TEMP
    	        WHEN type='003'
    	        (
                            seq_table                    SEQUENCE(1,1),
    	        	TYPE 		POSITION(1:3)	INTEGER EXTERNAL
    	        )

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/08/2006, 15h45
  2. [ORACLE 8.1.7] Message 2100 not found avec SQL LOADER
    Par ApprentiOracle dans le forum SQL*Loader
    Réponses: 3
    Dernier message: 09/08/2006, 20h03
  3. Problèm avec SQL*LOADER
    Par logicave dans le forum Oracle
    Réponses: 2
    Dernier message: 14/07/2006, 17h55
  4. [Oracle9iR2] chargement avec SQL*LOADER
    Par piotrek30 dans le forum SQL
    Réponses: 2
    Dernier message: 16/06/2006, 11h20
  5. Probléme de caratéres avec sql*loader
    Par delphyjp dans le forum Oracle
    Réponses: 4
    Dernier message: 08/03/2006, 10h53

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