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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.