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 18/12/2007, 11h55   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Par défaut SQL Loader : comment spécifier/contrôler le nombre de colonne à charger?

Bonjour,

Je souhaite charger un fichier de données en base (oracle 9i) via sql loader :

le fichier de type "csv" doit :
- avoir des ";" comme séparation entre les données : ca c'est ok, j'utilise <FIELDS TERMINATED BY ';'>
- je doit pouvoir charger des données nulles : ca c'est OK, j'utilise <TRAILING NULLCOLS>

Par contre, le nombre de colonnes d'une ligne à charger doit toujours être le même, aussi si ce n'est pas le cas dans certaines lignes du fichier, j'aimerais que ca parte en erreur pour ces lignes. Le problème c'est que je ne sais pas comment effectuer ce contrôle, ou spécifier le nombre de colonne à charger.

Comment faire?
reeds95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 11h56   #2
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Par défaut précision

je dois pouvoir charger des lignes de données avec des colonnes vides
reeds95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 14h37   #3
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 73
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 73
Points : 28
Points : 28
As - tu pensé à une table externe?
the_youpi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 14h38   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
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 319
Points : 5 837
Points : 5 837
Citation:
Envoyé par reeds95 Voir le message
...
- je doit pouvoir charger des données nulles : ca c'est OK, j'utilise <TRAILING NULLCOLS>

Par contre, le nombre de colonnes d'une ligne à charger doit toujours être le même, aussi si ce n'est pas le cas dans certaines lignes du fichier, j'aimerais que ca parte en erreur pour ces lignes. Le problème c'est que je ne sais pas comment effectuer ce contrôle, ou spécifier le nombre de colonne à charger.

Comment faire?
Le TRAILING NULLCOLS n'est pas pour charger des données nulles mais plutôt pour le contraire de ce que vous en avez besoin. Donc supprimez-le.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 14h46   #5
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Par défaut TAo

en fait, je passe par une Table temporaire avant de charger en base, où j'effectue divers contrôle.

De plus, j'utilisais le "trailing" au cas où il y a des colonnes vides dans le fichier : comme ce fichier : "CHE;RCE_ENT;94599099;;LENT;;;;;;;"

Si j'enlève le trailing comment gérer le ";;" ?
reeds95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 14h52   #6
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Par défaut mon code

voici mon code :


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
   OPTIONS (SILENT=(HEADER,FEEDBACK))
   LOAD DATA CHARACTERSET WE8ISO8859P1 
   TRUNCATE
   INTO TABLE *
   WHEN (COMPANY_TYPE!=BLANKS) AND (BO_NAME!=BLANKS) AND (CUST_STATUS!=BLANKS) 
   FIELDS TERMINATED BY ';'
   TRAILING NULLCOLS
   (
-- Fields from file ----------------------------------
a1         		BOUNDFILLER,    
a2		BOUNDFILLER,
a3    		BOUNDFILLER,
.
.
.
.
 
--Fields caculated ----------------------------------
aa1        	CHAR "nvl (:a1,' ')",    
aa2		CHAR "nvl(:a2,' ')",
aa3    	             CHAR "nvl(:a3,' ')",
.
.
)
reeds95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 18h18   #7
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Par défaut solution

c'est bon finalement :

faire un ksh de lancement du sql loader.
avant le traitement, remplacer (par la commande "sed") dans le fichier à charger les ";;" par "; ;"

et dans le loader pour les champs de type NUMBER, faire un decode pour remplacer les "; ;" par "0".
reeds95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 20h53   #8
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
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 319
Points : 5 837
Points : 5 837
Citation:
Envoyé par reeds95 Voir le message
c'est bon finalement :

faire un ksh de lancement du sql loader.
avant le traitement, remplacer (par la commande "sed") dans le fichier à charger les ";;" par "; ;"

et dans le loader pour les champs de type NUMBER, faire un decode pour remplacer les "; ;" par "0".
J'ai bien peur que toute cella ne servent à rien .
mnitu 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 07h32.


 
 
 
 
Partenaires

Hébergement Web