IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL*Loader Oracle Discussion :

Sql loader Help ? Conversion de date


Sujet :

SQL*Loader Oracle

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Points : 46
    Points
    46
    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 : 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.

  2. #2
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    un decode (ou même un case when) devrait convenir:

    Orafaq: Can one modify data as it loads into the database?

  3. #3
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Bonjour,

    1ere chose, à mon avis il te manque : dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SQl LOADER: Problème de date
    Par claralavraie dans le forum SQL*Loader
    Réponses: 25
    Dernier message: 28/03/2017, 12h24
  2. SQL*LOADER Clause when comparaison date
    Par maryline999 dans le forum SQL*Loader
    Réponses: 1
    Dernier message: 07/03/2013, 11h07
  3. Sql*Loader et date
    Par Mpierre dans le forum SQL
    Réponses: 6
    Dernier message: 09/06/2006, 18h25
  4. [T-SQL] Problème de conversions de dates
    Par kooljy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/06/2006, 15h19
  5. [SQL*Loader] Fusionner 2 colonnes dates
    Par choubiroute dans le forum Oracle
    Réponses: 4
    Dernier message: 21/04/2005, 15h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo