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 12/09/2006, 14h37   #1
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 56
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 56
Points : 18
Points : 18
Par défaut sql loader - charger un fichier plat ds plusieurs tables

Bonjour,

Si quelqu'un pouvait m'aider à résoudre ce petit problème ce serait bien sympa.

J'essaye d'importer des données dans une base oracle (8i) à l'aide de sqlldr.
Dans un script sql, je crée mes tables, ensuite j'appele le sqlldr pour initialiser mes tables avec les données d'un fichier plat. Je veux en fait insérer une partie des champs dans une table et l'autre partie ds l'autre. Les champs sont de longueurs variables. Les données insérées ds la première table sont OK mais pour la deuxième table il y a un décalage. (le prenom est placé ds le nom, le matricule ds le prénom, ... etc)

Structure d'une ligne du fichier plat
Rue | tel | code | ville | nom | prenom |matricule | fonction | categorie


Code :
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
 
fichier de controle
 
LOAD DATA INFILE 'file.csv'
APPEND
INTO TABLE Z_LOCALITE
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS(
	LOCID CHAR(10) "SEQ_LOC.nextval",
	RUE CHAR(200),
	TELEPHONE CHAR(50),
	CODE CHAR(10),
	VILLE CHAR(150)
)
 
INTO TABLE Z_PERSONNE
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
(
	PERSONNEID "SEQ_PERSONNE.nextval",
	NOM CHAR(50),
	PRENOM CHAR(50),
	MATRICULE CHAR(11),
	FONCTION CHAR(3),
	CATEGORIE CHAR(1),
	LOCID CHAR(10) "SEQ_LOC2.nextval"
)
persam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2006, 17h59   #2
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
Et si tu mets tes champs calculer en fin de loader ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
INTO TABLE Z_PERSONNE
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
(
	NOM CHAR(50),
	PRENOM CHAR(50),
	MATRICULE CHAR(11),
	FONCTION CHAR(3),
	CATEGORIE CHAR(1),
	LOCID CHAR(10) "SEQ_LOC2.nextval"
	PERSONNEID "SEQ_PERSONNE.nextval",
)
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 15h43   #3
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 56
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 56
Points : 18
Points : 18
Cela ne fonctionne pas...
Je ne sais pas si c'est possible.

J'ai utilisé deux fichiers de controle et j'appele deux fois la commande
de sqlldr.mais bon, lire deux fois un fichier d'entrée pour récupérer des données c'est loin d'être top...
persam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 15h53   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Ce tuto ne répond-il pas à ta question ?
http://jaouad.developpez.com/sqlldr/#LV-D
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 15h59   #5
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 56
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 56
Points : 18
Points : 18
Non, ds cette exemple, il met ces données ds 2 tables mais ne remplit pas toutes les colonnes.
persam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 16h19   #6
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Citation:
Envoyé par persam
il met ces données ds 2 tables mais ne remplit pas toutes les colonnes.
Il me semble que c'est exactement ce que tu veux faire (hormis le fait que tu as 2 colonnes calculées...)

Qu'entends-tu par "Cela ne fonctionne pas" ? Tu as une erreur ? Tu as toujours un décalage ?
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 16h48   #7
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 56
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 56
Points : 18
Points : 18
oups sorry j'ai rien dit, cela fonctionne bien en mettant les champs calculés à la fin. J'avais modifié mon fichier plat et avait une autre erreur.

MERCI!
persam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 16h57   #8
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
ouf, je comprends mieux il faut garder la même suite logique que le fichier.
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h50.


 
 
 
 
Partenaires

Hébergement Web