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 :
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
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 )
ce résultat est normal car il y a des dates en 00/00/0000
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.
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.
Partager