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 :

Erreur ORA-01861: le littéral ne concorde pas avec le format chaîne de caractères


Sujet :

SQL*Loader Oracle

  1. #21
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Après, il faut s'assurer que les données correspondent bien au format attendu, vérifier l'ordre des colonnes, se demander pourquoi on utilise quatre fois la même donnée pour alimenter des colonnes différentes...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  2. #22
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 359
    Points : 77
    Points
    77
    Par défaut
    J'ai fait la même opération en limitant les colonnes à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table T_RECTIF
    (DATE_FICHIER varchar2 (200),
    CD_PAYS varchar2 (200),
    DT_MVT date,
    CD_MVT varchar2 (200))
    ;
    avec le .ctl suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    options (skip=1)
    load data infile '2017_02.dat'
    append
    into table T_RECTIF
    fields terminated by ';'
    (DATE_FICHIER,
    CD_PAYS,
    DT_MVT "to_date(:DT_MVT,'yyyymmdd')",
    CD_MVT)
    et tout s'est bien passé.

    J'ai donc recréé la table avec toutes les colonnes et en ajoutant options (skip=1) dans le .ctl pour éviter de charger l'en-tête du fichier qui semblait donc tout bloquer mais j'obtiens finalement un autre message d'erreur:

    Enregistrement 1 : Rejeté - Erreur sur table T_RECTIF
    ORA-00604: une erreur s'est produite au niveau SQL récursif 1
    ORA-01830: Le modèle du format de date se termine avant la conversion de la chaîne d'entrée entière
    Microsoft SQL Server Management Studio v17.9.1

  3. #23
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Il te reste la solution de recréer la table dans sa structure complète et faire des tests en ajoutant les champs un par un dans le fichier de contrôle.
    Tu finiras par trouver à quel niveau ça coince.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #24
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 359
    Points : 77
    Points
    77
    Par défaut
    Fastidieuse mais néanmoins efficace technique.

    J'ai donc constaté que tout se passe bien jusqu'à la 2ème instruction concernant le chargement d'un format date.

    Jusqu'à cette étape, tout va bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    options (skip=1)
    load data infile 'Rectif.txt'
    append
    into table T_IMMAT_AAA_RECTIF_V2_NEW
    fields terminated by ';'
    (DATE_FICHIER,
    CD_PAYS,
    DT_MVT "to_date(:DT_MVT,'yyyymmdd')",
    CD_MVT, 
    VN_VO,
    CIV,
    PRENOM,
    NOM,
    NOM_USAGE,
    ADRESSE,
    LIGNE02,
    LIGNE03,
    LIGNE04,
    LIGNE05,
    CD_POSTAL,
    COMMUNE,
    LIGNE06,
    CD_CANT,
    CD_INSEE,
    CD_DEPT,
    CD_IRIS,
    CAT_CLI_N_O,
    CD_CSP,
    Et dès que j'ajoute une nouvelle ligne avec une date (année en l’occurrence)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AN_NAISS "to_date(:DT_MVT,'yyyy')")
    j'obtiens donc ce message:

    Enregistrement 1 : Rejeté - Erreur sur table T_IMMAT_AAA_RECTIF_V2_NEW.
    ORA-00604: une erreur s'est produite au niveau SQL récursif 1
    ORA-01830: Le modèle du format de date se termine avant la conversion de la chaîne d'entrée entière

    \\MAXIMUM ERROR COUNT EXCEEDED - Les statistiques données ci-dessus résultent d'une exécution partielle.
    Microsoft SQL Server Management Studio v17.9.1

  5. #25
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Cela me semble tout à fait normal...
    Est-ce que tu veux réellement alimenter la colonne AN_NAISS de ta table avec le 3ème champ de ton fichier, celui que tu as déjà utilisé pour renseigner la colonne DT_MVT ?

    D'autant que son contenu fait 8 caractères (il a pu être converti sans problème en date au format 'yyyymmdd') et que tu cherches à le convertir avec un format limité à 4 caractères seulement.

    Que dit le message d'erreur déjà ?
    ORA-01830: Le modèle du format de date se termine avant la conversion de la chaîne d'entrée entière
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #26
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 359
    Points : 77
    Points
    77
    Par défaut
    Je ne comprends pas comment les 2 champs peuvent arriver dans la même colonne vu que j'en ai prévu une par chaque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    create table T_IMMAT_AAA_RECTIF_V2_NEW
    (DATE_FICHIER varchar2 (200),
    CD_PAYS varchar2 (200),
    DT_MVT date,
    CD_MVT varchar2 (200),
    VN_VO varchar2 (200),
    CIV varchar2 (200),
    PRENOM varchar2 (200),
    NOM varchar2 (200),
    NOM_USAGE varchar2 (200),
    ADRESSE varchar2 (200),
    LIGNE02 varchar2 (200),
    LIGNE03 varchar2 (200),
    LIGNE04 varchar2 (200),
    LIGNE05 varchar2 (200),
    CD_POSTAL varchar2 (200),
    COMMUNE varchar2 (200),
    LIGNE06 varchar2 (200),
    CD_CANT varchar2 (200),
    CD_INSEE varchar2 (200),
    CD_DEPT varchar2 (200),
    CD_IRIS varchar2 (200),
    CAT_CLI_N_O varchar2 (200),
    CD_CSP varchar2 (200),
    AN_NAISS date)
    Microsoft SQL Server Management Studio v17.9.1

  7. #27
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Citation Envoyé par filsdepub Voir le message
    (...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DT_MVT "to_date(:DT_MVT,'yyyymmdd')",
    (...)
    Et dès que j'ajoute une nouvelle ligne avec une date (année en l’occurrence)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AN_NAISS "to_date(:DT_MVT,'yyyy')")
    j'obtiens donc ce message:

    Enregistrement 1 : Rejeté - Erreur sur table T_IMMAT_AAA_RECTIF_V2_NEW.
    ORA-00604: une erreur s'est produite au niveau SQL récursif 1
    ORA-01830: Le modèle du format de date se termine avant la conversion de la chaîne d'entrée entière

    \\MAXIMUM ERROR COUNT EXCEEDED - Les statistiques données ci-dessus résultent d'une exécution partielle.
    Ça ne te choque pas d'utiliser la même donnée pour alimenter les colonnes DT_MVT et AN_NAISS ?

    Ou alors tu n'as pas compris comment fonctionnait SQL*loader lorsqu'il appliquait une fonction de transformation sur une colonne...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #28
    Membre régulier
    Inscrit en
    Juin 2010
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 359
    Points : 77
    Points
    77
    Par défaut
    Il est vrai que mes connaissances en informatique sont assez réduites mais là j'avais vraiment de la m... dans les yeux !
    Au passage, merci de ta patience parce que je suis vraiment un boulet.

    J'ai donc maintenant réussi à charger intégralement mon fichier mais il y a un dernier problème qui apparaît: le format des dates.

    Je m'explique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DT_MVT "to_date(:DT_MVT,'yyyymmdd')"
    apparaît dans la table sous cet aspect: 01/02/2017 (normal)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AN_NAISS "to_date(:AN_NAISS,'yyyy')"
    apparaît dans la table sous cet aspect: 01/03/1954 (problématique car cela peut laisser penser que la date de naissance est vraiment le 01/03 alors que l'on n'en sait rien)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DT_CG "to_date(:DT_CG,'yyyymmdd')" 
    apparaît dans la table sous cet aspect: 23/09/1988 (normal)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ANMO_MEC "to_date(:ANMO_MEC,'yyyymm')"
    apparaît dans la table sous cet aspect: 01/09/1988 (il ne devrait apparaître que l'année et le mois)

    Comment serait-il possible que, lors du chargement, les formats to_date soient respectés et non pas systématiquement transformés en dd/mm/yyyy ?
    Microsoft SQL Server Management Studio v17.9.1

Discussions similaires

  1. Erreur ORA-12899 que je n'arrive pas à résoudre
    Par chekchouka dans le forum Oracle
    Réponses: 8
    Dernier message: 18/09/2012, 10h30
  2. Réponses: 19
    Dernier message: 17/03/2011, 14h30
  3. Réponses: 2
    Dernier message: 23/11/2010, 13h56
  4. Erreur ORA-01861 (problème de date)
    Par melleweb dans le forum SQL
    Réponses: 1
    Dernier message: 09/07/2007, 12h37
  5. ERREUR ORA-01861
    Par claralavraie dans le forum Oracle
    Réponses: 3
    Dernier message: 04/01/2006, 17h01

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