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 30/04/2007, 17h50   #1
Futur Membre du Club
 
Inscription : avril 2007
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 38
Points : 15
Points : 15
Par défaut Sql loader Help ? Conversion de date

Bonjour je récupère un fichier d'un as400 que je veux transfèrer dans Oracle avec Sql Loader. Les dates sont au format suivant "jj/mm/aaaa" stocké dans un champ alphanumérique de 10 caractères. Les enregistrements qui n'ont pas de date ont dans le champ "00/00/0000".
J'ai défini dans ma tables ces champs comme des champs au format date oracle. Ensuite dans mon fichier de controle j'ai :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
LOAD DATA INFILE 'ZXXRMG.csv' TRUNCATE INTO TABLE ZXXRMG FIELDS TERMINATED BY '|' ( 		
	CCGRP     	,	                                    
	CCDOS     	,
	CCTNO     	,
	CCTPRD    	,
	CCTUV     	,
	CCTLIB    	"TRIM(:CCTLIB)",
	CCTFAM    	,
	CCTSFA    	,
	CCTCNF    	,
	RMGDTC    	"to_date(RMGDTC||' 00:00:00','dd/mm/yyyy HH24:MI:SS')",
	RMGDTS    	)
j'ai l'erreur suivante dans le fichier de log de Sql loader :

Code :
1
2
3
4
5
6
7
 
 
Enregistrement 2 : Rejeté - Erreur sur TABLE HHPHYRMG.
ORA-01847: le jour du mois doit être compris entre 1 et le dernier jour du mois
 
Specify SKIP=2 when continuing the LOAD.
\MAXIMUM ERROR COUNT EXCEEDED - Les statistiques données ci-dessus résultent d'une exécution partielle.
ce résultat est normal car il y a des dates en 00/00/0000
le résultat que j'aimerais atteindre pendant le chargemenent est :
Si la date xx/xx/xxxx est valide la convertire et la charger dans le champ sinon mettre a NULL la valeur du champ.
Puis-je y arriver par les procédure stockés ? Comment faire un if else sur un champ du fichier de controle ?
Merci pour vos nombreuses réponses.
okilele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 21h09   #2
Membre Expert
 
Homme
Expert Datawarehouses + BO (sur BDD Oracle et SQL Server)
Inscription : mars 2003
Messages : 645
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 41
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Expert Datawarehouses + BO (sur BDD Oracle et SQL Server)

Informations forums :
Inscription : mars 2003
Messages : 645
Points : 1 165
Points : 1 165
un decode (ou même un case when) devrait convenir:

Orafaq: Can one modify data as it loads into the database?
phili_b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 09h13   #3
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,

1ere chose, à mon avis il te manque : dans ton code
Code :
RMGDTC    	"to_date(:RMGDTC||' 00:00:00','DD/MM/YYYY HH24:MI:SS')",
2eme chose, si tu as des dates non valide essaye ça :
Code :
RMGDTC    	"decode('00/00/0000', to_date('01/01/1900','dd/mm/yyyy'),to_date(:RMGDTC||' 00:00:00','DD/MM/YYYY HH24:MI:SS'))",
Si ta date est egale à 00/00/0000 alors tu rentre une date bidon (ici 01/01/1900)
sinon tu converti la date

Normalement ça doit passer

Voili, voilou
kalyparker 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 02h16.


 
 
 
 
Partenaires

Hébergement Web