Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 15/06/2011, 10h14   #1
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
Par défaut [SQLLoader] La dernière colonne ajoutée dans la base a un retour chariot

Bonjour,

J'utilise sqloader pour ajouter les données d'un fichier CSV dans une table.

Voici le contenu de mon fichier ctl
Code :
1
2
3
4
5
6
 
LOAD 
 append
 INTO TABLE AUTEURS_TROUVES
 FIELDS terminated BY ";" OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
 ( service_appartenance, auteur, id_operateur, id_auteur_identifie )
voici une partie des données de mon fichier csv :

Citation:

service_appartenance;auteur;id_operateur;id_auteur_identifie
03;MANSENCAL;16564e40-5d1a-11dc-8455-0011259c8108;e7c09890-e1c5-11df-8004-0011259c8108
03;MANSENCAL;e55ee070-1f4f-11dc-bf60-0011259c8108;e7c09890-e1c5-11df-8004-0011259c8108
03;mansencal;16564e40-5d1a-11dc-8455-0011259c8108;e7c09890-e1c5-11df-8004-0011259c8108
Lorsque j'éxécute sqlloader il n'y a pas d'erreur lors du chargement dans la base. Malheureusement il y a un problème avec la derniere colonne. En effet
il y a un caractere retour chariot dans chque element de la derniere colonne.
Voir le fichier attaché "caractere retour chariot en fin de colonne.JPG".

Cela cause des problèmes dans le code ce retour chariot.

Comment supprimer ce retour chariot dans la base de données au chargement de sqlloader ou bien même apres. Je ne peux pas modifier le fichier csv.


Merci
Images attachées
Type de fichier : jpg caractere retour chariot en fin de colonne.JPG (42,3 Ko, 8 affichages)
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 11h42   #2
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
bonjour,

Des fois Toad montre ce caractère alors qu'il n'en est rien.

Essayes STP de faire un simple ou bien un de la dernière colonne.
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 15/06/2011, 12h18   #3
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
Salut,

1. En faisant un SELECT ca m'affiche la même chose. J’observe toujours le caractère retour chariot.

2. De plus ce caractère pose problème dans mon application car il y un bug a cause de cela. SI j'enlève manuellement le caractère le bug disparait.

3. Lorsque je clique sur le champ avec ce caractère dans Toad, j'observe un retour chariot. Je peux supprimer manuellement ce retour chariot depuis Toad aussi.

4. Si je change mon fichier CSV avec un « ; » à la fin de chaque ligne cela résout le problème aussi. Mais je ne peux pas modifier mon fichier CSV manuellement. Je ne peux utiliser que des scripts pour trouver une solution.

Comment résoudre ce problème ?

Merci
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 13h46   #4
Membre du Club
 
Inscription : décembre 2010
Messages : 190
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 190
Points : 60
Points : 60
Bonjour,

Il y a plusieurs façons de faire :

- Soit passer un script une fois que SQL*LOADER ait fini pour supprimer le dernier caractère de la colonne en question.
- Soit donner à SQL*LOADER un nombre bien défini de caractères pour le chargement dans la colonne id_auteur_identifie si jamais le fichier comporte toujours le même nombre de caractères pour cette colonne.
AbouZaid est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 15/06/2011, 13h51   #5
Membre expérimenté
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 286
Points : 563
Points : 563
Citation:
Envoyé par Battosaiii Voir le message
Salut,

1. En faisant un SELECT ca m'affiche la même chose. J’observe toujours le caractère retour chariot.

2. De plus ce caractère pose problème dans mon application car il y un bug a cause de cela. SI j'enlève manuellement le caractère le bug disparait.

3. Lorsque je clique sur le champ avec ce caractère dans Toad, j'observe un retour chariot. Je peux supprimer manuellement ce retour chariot depuis Toad aussi.

4. Si je change mon fichier CSV avec un « ; » à la fin de chaque ligne cela résout le problème aussi. Mais je ne peux pas modifier mon fichier CSV manuellement. Je ne peux utiliser que des scripts pour trouver une solution.

Comment résoudre ce problème ?

Merci
Bonjour,

Vous devriez identifier le caractère de fin de votre ligne et utiliser l'option str.

Par exemple votre fichier est

03;MANSENCAL;16564e40-5d1a-11dc-8455-0011259c8108;e7c09890-e1c5-11df-8004-0011259c81080D
03;MANSENCAL;e55ee070-1f4f-11dc-bf60-0011259c8108;e7c09890-e1c5-11df-8004-0011259c81080D
03;mansencal;16564e40-5d1a-11dc-8455-0011259c8108;e7c09890-e1c5-11df-8004-0011259c81080D

'OD' étant la valeur ASCII du retour chariot

Un controle file comme le suivant fera l'affaire:
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
 
LOAD 
INFILE 'c.dat' "str '0D'"
 append
 INTO TABLE AUTEURS_TROUVES
 FIELDS terminated BY ";" OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
 ( service_appartenance, auteur, id_operateur, id_auteur_identifie )
 
 
mhouri > TRUNCATE TABLE auteurs_trouves;
 
TABLE truncated.
 
C:\>sqlldr mhouri/mhouri@mhouri control=c.ctl
 
SQL*Loader: Release 10.2.0.3.0 - Production ON Wed Jun 15 13:39:08 2011
 
Copyright (c) 1982, 2005, Oracle.  ALL rights reserved.
 
Commit point reached - logical record count 3
 
mhouri > SELECT * FROM auteurs_trouves;
 
SER AUTEUR     ID_OPERATEUR                        ID_AUTEUR_IDENTIFIE
03  MANSENCAL 16564e40-5d1a-11dc-8455-0011259c8108 e7c09890-e1c5-11df-8004-0011259c8108                                            
03  MANSENCAL e55ee070-1f4f-11dc-bf60-0011259c8108 e7c09890-e1c5-11df-8004-0011259c8108                                                                                                                          
03  mansencal 16564e40-5d1a-11dc-8455-0011259c8108 e7c09890-e1c5-11df-8004-0011259c8108
Si la fin de votre fichier est ||
03;MANSENCAL;16564e40-5d1a-11dc-8455-0011259c8108;e7c09890-e1c5-11df-8004-0011259c8108||
03;MANSENCAL;e55ee070-1f4f-11dc-bf60-0011259c8108;e7c09890-e1c5-11df-8004-0011259c8108||
03;mansencal;16564e40-5d1a-11dc-8455-0011259c8108;e7c09890-e1c5-11df-8004-0011259c8108||

Adaptez alors le control file en conséquence
Code :
1
2
3
4
5
6
7
 
LOAD 
INFILE 'c.dat' "str '||'"
 append
 INTO TABLE AUTEURS_TROUVES
 FIELDS terminated BY ";" OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
 ( service_appartenance, auteur, id_operateur, id_auteur_identifie )
et re-essayer

Bien à vous

Mohamed Houri
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/06/2011, 14h02   #6
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour,

De mémoire tu peux utiliser des fonctions dans ton control file.

Après je me souvient plus exactement la syntaxe mais ça devrait faire un truc du genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
LOAD 
 APPEND
 INTO TABLE AUTEURS_TROUVES
 FIELDS terminated BY ";" OPTIONALLY ENCLOSED BY '"' 
 TRAILING NULLCOLS
 ( 
   service_appartenance, 
   auteur, 
   id_operateur, 
   id_auteur_identifie "REPLACE(:id_auteur_identifie,chr(13),'')"
)
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 15/06/2011, 14h05   #7
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 810
Points : 5 810
Vos soucis sont du au fait que le fichier csv est crées sous windows où chaque enregistrement finit par une paire des caractères <CR><LF> et ensuite vous le transférez via ftp en mode binaire sous un système Unix/Linux où le fin d’enregistrement est <LF>. Il suffit de faire un transfère via ftp en mode ASCII pour éliminer le <CR> de trop.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/06/2011, 14h55   #8
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
Je viens de déterminer une solution :

Code :
1
2
3
4
5
6
 
LOAD 
 append
 INTO TABLE AUTEURS_TROUVES
 FIELDS terminated BY ";" OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
 ( service_appartenance, auteur, id_operateur, id_auteur_identifie CHAR TERMINATED BY WHITESPACE )
Merci
Battosaiii 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 05h29.


 
 
 
 
Partenaires

Hébergement Web