Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > SQL*Loader
SQL*Loader Forum d'entraide sur Oracle SQL*Loader
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/03/2007, 11h25   #1
Invité de passage
 
Inscription : septembre 2005
Messages : 33
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 33
Points : 3
Points : 3
Par défaut Pb insertion SQL Loader

Bonjour,

J'ai un petit problème concernant l'insertion les lignes "séquencées" avec SQL Loader.

Exemple :

- un fichier de données avec des enregistrements de type
Citation:
01...
02...
02...
01...
02...
01...
02...
- un fichier controle contenant
Code :
1
2
3
4
5
6
7
8
9
"LOAD DATA  
  INTO TABLE "T1"
  APPEND
  WHEN (1:2)='01'
  FIELDS (...)
  INTO TABLE "T2"
  APPEND
  WHEN (1:2)='02'
  FIELDS (...)"

Problème : dans ce cas, SQL Loader traite le fichier de données entièrement pour les insertions dans T1, puis entièrement pour les insertions dans T2.
Je perds donc la "séquentialité" des enregistrements dans le fichier.

Comment peut-on traiter un fichier de données lignes par lignes?


Merci.
HomoErectus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h28   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
sachant qu'un table n'a pas d'ordre déterminé (à moins d'être une IOT) je ne comprends pas bien l'intérêt
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h34   #3
Invité de passage
 
Inscription : septembre 2005
Messages : 33
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 33
Points : 3
Points : 3
Imaginons que les lignes "01" soit des entête de commandes, et les lignes "02" des lignes de commandes dépendantes des le ligne "01" précédente.

Je n'ai pas d'identifiant d'entête de commande dans mes lignes de commande, juste la séquentialité du fichier. On peut imaginer gérer les numéros de séquence par trigger.

Seulement dans ce cas, les lignes d'entêtes sont toutes traitées d'abord, les lignes toutes traitées ensuite. Le fichier n'est pas lu ligne par ligne... Utiliser une séquence "externe" n'est pas possible.
HomoErectus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h35   #4
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
En utilisant une séquence lors de l'insertion, alors tu peux garder la séquentialité du fichier (si on peux parler de séquence dans un fichier plat )
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h38   #5
Invité de passage
 
Inscription : septembre 2005
Messages : 33
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 33
Points : 3
Points : 3
Citation:
Envoyé par kalyparker
En utilisant une séquence lors de l'insertion, alors tu peux garder la séquentialité du fichier (si on peux parler de séquence dans un fichier plat )
Ben non, c'est bien ça le problème...

Dans mon exemple (premier post), si j'utilise une séquence pour mes lignes "01", avant de traiter ma première ligne "02", la séquence a déjà été incrémentée 3 fois...
HomoErectus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h40   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
désolé mais là tu vas pas pouvoir t'en sortir. Il faut inclure l'entête dans les lignes.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h44   #7
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Une solution :

Utilise une table temporaire...
Lors de l'import tu insert un numéro de séquence, donc logiquement tu doit avoir le même ordre de tes enregistrements que dans le fichier.
Et après tu dispatche tes enregistrements dans tes tables T1 et T2 en ajoutant les données qui permettent de faire le lien.
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h48   #8
Invité de passage
 
Inscription : septembre 2005
Messages : 33
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 33
Points : 3
Points : 3
Pour être plus explicite, imaginons un fichier tel que :

01 001
02 001 001
02 001 002
01 002
02 002 001
02 002 002
02 002 003
01 003
02 003 001

Les lignes commançant par "01" sont des entêtes de commandes, le nombre suivant correspondant à un numéro de commande. (Ex : 1ère ligne = commande "001").
Les lignes commançant par "02" sont des lignes de commandes, les nombres suivant correspondant au numéro de commande et au numéro de ligne de commande. (Ex : 2ème ligne = première ligne de commande de la commande "001").

Ce fichier, c'est l'idéal. Mais je ne l'ai pas.
Je n'ai qu'un fichier avec les types de lignes, cad "01" et "02". On ne peut savoir qu'une ligne de commande appartient à une commande que par l'ordre des lignes dans le fichier.

SQL Loader traite d'abord toutes les lignes "01" du fichier, puis toutes les lignes "02". Je perd donc la séquentialité de mon fichier.

Y'a-t-il un moyen de pouvoir traiter un fichier de données ligne par ligne?


Merci.
HomoErectus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h51   #9
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Citation:
Y'a-t-il un moyen de pouvoir traiter un fichier de données ligne par ligne?
la solution de table temporaire ne te plait pas ?
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 11h54   #10
Invité de passage
 
Inscription : septembre 2005
Messages : 33
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 33
Points : 3
Points : 3
Si, mais on a écrit en même temps.

Merci.
HomoErectus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 10h03   #11
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
Il y a moyen sans table temporaire en utilisant des triggers et des sequences et un peu d'astuce....

Vous pouvez voir ce qui a déjà été dit dans la (longue) discussion http://www.developpez.net/forums/sho...d.php?t=263951
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 10h13   #12
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Citation:
Vous pouvez voir ce qui a déjà été dit dans la (longue) discussion http://www.developpez.net/forums/sho...d.php?t=263951
Merci à toi Wurlitzer, j'ai chercher ce post hier, mais pas trouvé

Citation:
dans la (longue) discussion
Je sens comme une pointe de moquerie
c'etait un de mes premiers post alors j'etait pas très précise dans mes réponses (ça s'est peu être pas amélioré après tout).

Pour en revenir à notre sujet, HomoErectus tu as toutes les solutions possibles, à toi de voir !
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 10h31   #13
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
Non, non pas de moquerie. Au contraire, on avait exploré pas mal de solution et c'est ce qui est intéressant
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h47.


 
 
 
 
Partenaires

Hébergement Web