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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2010
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 376
    Par défaut Erreur ORA-01861: le littéral ne concorde pas avec le format chaîne de caractères
    Bonjour,

    Je cherche à charger des données dans une table qui a été créée comme suit:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     create table T_IMMAT
    (DATE_FICHIER varchar(27), 
    GENRE varchar(4), 
    CODE_DPT varchar(3), 
    IMMAT varchar (12), 
    DATE_CG date (8), 
    CODE_CANTON varchar(2), 
    CODE_COMMUNE varchar(3),
    PUISS_FISC varchar (3), 
    PTR varchar (5), 
    NUM_VOIE varchar (5), 
    BIS_TER varchar(1), 
    NATURE_VOIE varchar(6), 
    NOM_VOIE varchar(27), 
    CODE_MOUV varchar(4),
    CAT_CLI varchar(1), 
    VIN varchar(17), 
    MARQUE_CARROSSIER varchar(10), 
    TYPE_MINE varchar(20), 
    MODELE varchar(9), 
    CARROSSERIE varchar(8), 
    ENERGIE varchar(2),
    PLACES_ASSISES varchar(5), 
    MEC date(6), 
    SIREN varchar(9), 
    APE varchar(5), 
    CSP varchar(2), 
    SIREN_LEASING varchar(9), 
    AN_NAISS varchar(4),
    CIVILITE varchar(7), 
    PATRONYME varchar(39), 
    CDE_COMMUNE_INSEE varchar(3), 
    DR varchar(2), 
    CODE_AFF varchar(5), 
    TYPE_CAISSE varchar(6), 
    SEGMENT_EUR varchar(16),
     NBRE_PORTES varchar(1), 
     MODELE_RE varchar(9), 
     IRIS varchar(9), 
     MARQUE_CONSTRUCTEUR varchar(10), 
     DATE_ARRETEE varchar(27), 
     VOLUME varchar(9), 
     JO varchar(4))
     ;
    Je cherche à charger des données depuis un fichier texte avec le .ctl suivant:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    load data
    infile'2017_02.dat'
     
    --truncate
    append
     
    into table T_IMMAT
     
    (DATE_FICHIER position (1:27), 
    GENRE position (28:31), 
    CODE_DPT position (32:34), 
    IMMAT position (35:46), 
    DATE_CG position (47:54), 
    CODE_CANTON position (55:56),
    CODE_COMMUNE position (57:59), 
    PUISS_FISC position (60:62), 
    PTR position (63:67), 
    NUM_VOIE position (68:72), 
    BIS_TER position (73:73), 
    NATURE_VOIE position (74:79),
    NOM_VOIE position (80:106), 
    CODE_MOUV position (107:110), 
    CAT_CLI position (111:111), 
    VIN position (112:128), 
    MARQUE_CARROSSIER position (129:138), 
    TYPE_MINE position (139:158),
    MODELE position (159:167), 
    CARROSSERIE position (168:175), 
    ENERGIE position (176:177), 
    PLACES_ASSISES position (178:182), 
    MEC position (183:188), 
    SIREN position (189:197),
    APE position (198:202), 
    CSP position (203:204), 
    SIREN_LEASING position (205:213), 
    AN_NAISS position (214:217), 
    CIVILITE position (218:224), 
    PATRONYME position (225:263),
    CDE_COMMUNE_INSEE position (264:266), 
    DR position (267:268), 
    CODE_AFF position (269:273), 
    TYPE_CAISSE position (274:279), 
    SEGMENT_EUR position (280:295), 
    NBRE_PORTES position (296:296), 
    MODELE_RE position (297:305), 
    IRIS position (306:314), 
    MARQUE_CONSTRUCTEUR position (315:324), 
    DATE_ARRETEE position (325:351), 
    VOLUME position (352:360), 
    JO position (361:364))
    Et j'obtiens le message d'erreur suivant:

    Enregistrement 1 : Rejeté - Erreur sur table T_IMMAT, colonne DATE_CG.
    ORA-01861: le littéral ne concorde pas avec le format chaîne de caractères


    Je suppose que le problème provient de mes champs date mais je ne vois quoi modifier dans le .ctl pour arriver à charger les données.

    Quelqu'un aurait une idée ?

    Merci.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    Il faut que tu précises dans ton fichier CTL comment tu convertis la donnée de date lue dans ton fichier (du texte sur 8 caractères) en une date reconnue par Oracle.
    Cela donnerait quelque chose comme cela à la ligne 13 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATE_CG position (47:54) "to_date(:DATE_CG, 'YYYYMMDD')",
    A adapter au format de la date dans ton fichier et à vérifier dans la documentation d'Oracle (Fascicule "Utilities") parce que je donne les informations de mémoire.
    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.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2010
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 376
    Par défaut
    Merci, ça fonctionne parfaitement.

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2010
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 376
    Par défaut
    Bonjour,

    Je reviens finalement sur le sujet car mon problème (maintenant résolu) portait sur le chargement d'un fichier fixe.

    Il se pose aussi sur le chargement d'un fichier variable.

    J'ai créé une table comme suit:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    create table T_RECTIF
    (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,
    MODELE_REN varchar2 (200),
    SEG_EUR varchar2 (200),
    SEG_REN varchar2 (200),
    VERSION varchar2 (200),
    GENRE varchar2 (200),
    IMMAT varchar2 (200),
    IMMAT_NUM varchar2 (200),
    IMMAT_LET varchar2 (200),
    DEPT_IMMAT varchar2 (200),
    DT_CG date,
    VIN varchar2 (200),
    MARQUE_CARR varchar2 (200),
    TYPE_MINE varchar2 (200),
    MODELE varchar2 (200),
    ANMO_MEC date,
    IMMAT_PREC varchar2 (200),
    IMMAT_NUM_PR varchar2 (200),
    IMMAT_LET_PR varchar2 (200),
    DEPT_IMMAT_PREC varchar2 (200),
    CD_APE varchar2 (200),
    SIREN varchar2 (200),
    RAIS_SOC_LOC varchar2 (200),
    NOM_LOC varchar2 (200),
    PRENOM_LOC varchar2 (200),
    TYPE_LOC varchar2 (200),
    SIREN_LOUEUR varchar2 (200),
    TURBO varchar2 (200),
    DATE_ARRETE date,
    VOLUME varchar2 (200),
    JO varchar2 (200))
    ;

    J'ai donc essayé plusieurs combinaisons pour adapter la syntaxe du fichier fixe au fichier variable, du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    load data infile 'RECTIF_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 cela n'a bien entendu pas fonctionné.

    Quelle serait donc la formule magique pour ce genre de fichier ?

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    Compare ces deux lignes :
    Citation Envoyé par filsdepub Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "CD_MVT" "to_date(:CD_MVT,yyyymmdd)",
    ...
    Citation Envoyé par al1_24 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATE_CG position (47:54) "to_date(:DATE_CG, 'YYYYMMDD')",
    Notes-tu une différence ?

    PS : Le livre secret des formules magiques est accessible à tous ici : Oracle Database Utilities
    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. #6
    Membre éclairé
    Inscrit en
    Juin 2010
    Messages
    376
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 376
    Par défaut
    A part les majuscules dans le format du to_date, rien de particulier.

    Je suppose qu'il faudrait mettre une séparation entre et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "to_date(:CD_MVT,yyyymmdd)"
    mais ce que j'ai tenté (, ; etc..) n'a pas fonctionné.

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