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 13/07/2007, 15h32   #1
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 40
Points : 33
Points : 33
Par défaut sqlloader - import de records sur plusieurs lignes

Je souhaite importer, avec sqlloader, un fichier texte contenant des enregistrements typés :
une colonne type permet de déterminer la structure chargées et de déduire la table cible. Les colonnes ont une longueur fixe (en fonction du type de record).
Jusque là tout va bien.
La où ça se complique, c'est que certains types d'enregistrements sont sur plusieurs lignes.
Jusqu'à 2 lignes je sais faire (continue if). A delà non...
Une idée ?
Vincent_D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2007, 17h47   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
tu as essayé avec CONCATENATE?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2007, 17h55   #3
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 40
Points : 33
Points : 33
Visiblement, le concatenate doit s'appliquer à tous les enregistrements signifie que les enregistrements sont sur 3 lignes.
Malheureusement, j'en ai sur 1 lignes et d'autres sur 3.
Le continueif semble pas mal mais il semble qu'il faut un caractère de continuation sur la 2ème ligne et ça, j'ai pas...
Vincent_D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2007, 18h21   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
si les enregistrements sont de tailles fixe, tu devrais toujours avoir le meme nombre de ligne, non?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2007, 18h30   #5
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 40
Points : 33
Points : 33
Non, non.
Il y a different types d'enregistrement (chaque type correspondant à une table).
Lorsqu'il y a peu de colonnes dans la table, une ligne suffit pour décrire l'enregistrement. Sinon, l'enregistrement doit être continué sur une ou plusieurs lignes.
Vincent_D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2007, 18h35   #6
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
oui, donc tu as plusieurs fichiers de controle, non? tu peux donc pour chaque table définir le nombre de ligne par enregistrement... Je ne vois pas très bien comment les enregistrements sont séparés.
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2007, 18h57   #7
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 40
Points : 33
Points : 33
Supposons que j'ai une table T1 (id1, col10) et T2 (id2, col20, col22, col23)
dans T1 (1;TOTO), (2;TATATUTU)
dans T2 (1;TOTO;BEAUTOTO;MOCHETOTO;PABOTOTO), (2;TATA;BELTATA;MOCTATA;PABELTATA)
Le fichier aurait le format suivant :
Citation:
T1 1TOTO
T1 2TATATUTU
T2 1TOTO BEAUTOTO
MOCHETOTO
PABOTOTO
T2 2TATA BELTATA
MOCHTATA
PABELTATA
Les enregistrements de type 1 sont sur 1 ligne, les enregsitrements de type 2 sur 3 lignes.

Je sais dire
Code :
1
2
3
4
5
6
7
8
9
10
11
 
 
LOAD DATA
-- table T2
INTO TABLE T1 
WHEN (1:2)='T1'
(id1 position (3:5), col10 position(6:20))
-- table T2
INTO TABLE T2 
WHEN (1:2)='T2'
(id2 position (3:5), col20 position(6:15), col22 position(16:30)...)
Avec continueif, je peux charger sans doute préciser que si le type est T2 alors la ligne suivante est à charger dans le même record mais pour la 2ème ligne je suis sec...
Vincent_D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2007, 19h53   #8
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
c'est très clair. tu fais du multitable load.

est-ce que tu pourrais modifier le fichier avec perl par exemple avant de le charger?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 10h55   #9
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 40
Points : 33
Points : 33
En fait, nous avons un traitement existant qui fait le boulot en java à partir d'une description du fichier d'entrée en xml.
Nous ne souhaitons proposer une l'option sqlloader que si cela reste simple.

Pour le moment, je ne vois que 2 solutions :
1) celle que tu as proposé pour mettre tous les records sur une seule ligne
2) un sqlloader pour traiter les records qui sont sur une ligne. Puis un deuxième pour traiter les lignes qui sont sur 3 lignes (avec concatenate 3)

D'autres idées ?
Vincent_D 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 17h02.


 
 
 
 
Partenaires

Hébergement Web