Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 18/05/2007, 14h43   #1
Invité régulier
 
Inscription : avril 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 28
Points : 6
Points : 6
Par défaut [SQL Loader]Import tables en fichier csv,Linux RHEL3 & Oracle 9i

Bonjour à tous,

Voilà. J'aimerai importer des fichiers csv sous Oracle 9i qui a déjà une base de données.

J'ai bien compris que je devais utiliser sqlldr, je l'ai bien sous ma machine (Oracle 9i avec Linux RHEL 3) mais j'aurai plusieurs questions (dont je n'ai pas trouvé les réponses dans les tutoriels) :

1°) Est-ce qu'il faut que la table que je veux importer existe déjà sous la base ?
2°) Est-il obligatoire que le nom des colonnes n'apparaissent pas dans le fichier texte ?
3°) L'option skip compte le nombre de lignes je suppose ?

Merci par avance de vos réponses
Lucinda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 15h20   #2
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
Bonjour,

Dans l'ordre :
1. Oui
2. Si le nom de la colonne apparait au debut de ton fichier, tu peux "sauter" cette ligne.
3. skip sert justement à sauter cette ligne

voili, voilou
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 15h43   #3
Invité régulier
 
Inscription : avril 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 28
Points : 6
Points : 6
Merci pour cette réponse rapide

Bon, donc la table doit exister, ce problème ne sera pas insurmontable.

Pour ce qui est de skip, j'aurai souhaité qu'il en saute plusieurs... et je pense que j'aurai aussi besoin de l'option 'load'.

Parce que voici un exemple de fichier :
Code :
1
2
3
4
5
6
 
 
iduser;dtname;dtmaxSize
1;Christa;10000
2;Nicole;9000
2 Rows retrieved
Donc, il faut que je saute 3 lignes en mettent l'option ?
Mais est-ce que je pourrai ajouter l'option load après, de telle sorte qu'il ne garde que les enregistrements et pas la dernière ligne (qui n'est pas un enregistrement) ?

A moins que je trouve l'option dans mdb-sql de MDBTools pour empêcher l'impression de la dernière ligne... à étudier.
Lucinda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2007, 12h28   #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
Citation:
Merci pour cette réponse rapide
Celle ci l'est beaucoup moins

Pour ce qui est de skip :
Si tu as 3 lignes à sauter, alors il suffit de mettre skip=3 lors de l'appel à sqlldr

Pour ce qui est de load :
Cette option permet de dire combien de ligne tu as à charger, donc si tu connais le nb d'enregistrement ça peux marcher (load=50 pour 50 enregistrement).
(sqlldr ne compte pas les lignes que tu sautes avec skip)

Il n'existe pas (à ma connaissance) une option qui te permet de ne pas prendre en compte la dernière ligne.
Par contre tu peux peux être supprimer cette ligne avec un petit shell unix !

voili, voilou
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 09h35   #5
Invité régulier
 
Inscription : avril 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 28
Points : 6
Points : 6
Ce n'est pas bien grave si la réponse a été un peu moins rapide, j'ai déjà une réponse

Bien alors il faudra que je mette en forme mon fichier avant de faire l'import dans la base Oracle.

Merci bien, grâce à toi j'ai pu avancer dans mon problème (et c'est pas rien d'arriver à me faire avancer... le problème de base étant lire une base Access sous Linux de manière automatique puisque devant pouvoir être executé durant un programme).


Juste une dernière petite quesion : si mon fichier commence par des lignes vides, il faut que je les saute aussi ?
Lucinda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 07h13   #6
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:
Juste une dernière petite quesion : si mon fichier commence par des lignes vides, il faut que je les saute aussi ?
Je pense que oui.

voili, voilou
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 09h36   #7
Invité régulier
 
Inscription : avril 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 28
Points : 6
Points : 6
Merci

J'ai donc résolu mon problème

Pour résumer :
Le problème : utiliser sqlldr avec un fichier en csv contenant le nom des colonnes en début de fichier, et le nombres d'enregistrements en fin de fichier.

La solution :
Utiliser la commande "grep -v" pour enlever les lignes superflues, puis utiliser sqlldr avec l'option skip=2 (nombre de lignes vides en début de fichier).

Contrainte :
La table que l'on veut importer doit être existante

Lucinda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 17h39   #8
Membre du Club
 
Inscription : décembre 2005
Messages : 76
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 76
Points : 42
Points : 42
je ne comprend pas, tu as utilisé sqlldr sans utilisé un fichier de control
sofiane1111 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 09h11   #9
Invité régulier
 
Inscription : avril 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 28
Points : 6
Points : 6
Bien sûr que si, j'ai utilisé un fichier de controle.

Je voulais juste préciser deux-trois points techniques sur la commande sqlldr. Notamment parce que mes fichiers à importer ressemblaient à ça à la base :

Code :
1
2
3
4
5
6
 
 
COLONNE_UN;COLONNE_DEUX;COLONNE_TROIS
1;2;3
1;2;3
2 Rows Retrieved
Donc j'ai dû enlever le nom des colonnes ainsi que les stats pour pourvoir importer la table

Grâce à la ligne suivante, j'importe la table (créée auparavant) :
sqlldr login/pass control=control_file.ctl skip=2.

Tu trouveras mon fichier de contrôle sur le forum à cette adresse :
http://www.developpez.net/forums/sho...d.php?t=356082

Si t'as des questions, hésites pas, je ferai au mieux pour y répondre.
Lucinda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 11h02   #10
Membre du Club
 
Inscription : décembre 2005
Messages : 76
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 76
Points : 42
Points : 42
Ok j'ai compris.

Merci beaucoup.
sofiane1111 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 02h43.


 
 
 
 
Partenaires

Hébergement Web