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

Oracle Discussion :

Erreur ORA-12899 que je n'arrive pas à résoudre


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Erreur ORA-12899 que je n'arrive pas à résoudre
    Bonjour,

    J'ai une table externe qui est représentée par un fichier csv. Je récupère les données issus de cette table pour les insérer dans une table de la base. J'obtiens ce genre d'erreur :
    KUP-04101: record 18 rejected in file fichier.csv
    KUP-04021: field formatting error for field ID
    KUP-04026: field too long for datatype
    ou encore :
    error processing column ID in row 2 for datafile fichier.csv
    ORA-12899: value too large for column ID (actual: 91, maximum: 7)
    Or j'ai vérifié mes champs ID ne sont pas plus longs que ce qui leur est autorisé (7), ils sont de taille 6.

    Avez-vous une idée sur ce qui pourrait expliquer cette erreur?

    Merci d'avance pour votre aide.

    Cordialement.

  2. #2
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Bonjour à vous
    1 - Merci d'indiquer la version ORACLE que vous utilisez
    2 - La description de votre table externe
    3 - Un condensé de votre fichier avec des enreg OK et d'autres KO

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Pour la version d'oracle c'est : 10G express edition

    Ma table externe ressemble à ça :
    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
    create table REFPAMUSER.E_PERSONNE
    (
    	ID                      VARCHAR2(7   CHAR),
    	NOM         VARCHAR2(64  CHAR),
    	PRENOM     VARCHAR2(64  CHAR),
    	EMAIL      VARCHAR2(128 CHAR),
    	ADRESSE   VARCHAR2(200 CHAR)
    )
      ORGANIZATION EXTERNAL
      (
        TYPE ORACLE_LOADER
        DEFAULT DIRECTORY  DATA_DIR
        ACCESS PARAMETERS
        (
        records delimited by newline
        SKIP 1
        badfile   BAD_DIR:'file1.bad'
        logfile   LOG_DIR:'file2.log'
        fields terminated by ';'
        missing field values are null
        ) 
        LOCATION ("DATA_DIR":'fichier.csv')
      )
      REJECT LIMIT UNLIMITED ;
    Mes lignes dans le fichier Csv ressemblent à ça :
    111111;Nom;Prenom;nom.prenom@email.com;
    Dsl, je ne peux pas mettre mes vrais fichiers, déjà il y a trop de données et en plus c'est confidentiel

    En fait j'ai l'impression qu'il ne délimite pas bien les champs (91 caracteres au lieu de 6 pour l'ID c'est qu'il s'arrête pas au ; non?

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    il semble que vous avez un problème de caractère set (single byte et multi-byte character)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ID                      VARCHAR2(7   CHAR),
    Vérifiez bien la correpondance de l'autre table

    Est ce peut-être du

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ID                      VARCHAR2(7   BYTE),

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Merci Mohamed.Houri mais pouvez m'expliquer un peu plus? Je n'ai pas bien compris, vous pensez que je devrais remplacer char par byte?

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par chekchouka Voir le message
    Merci Mohamed.Houri mais pouvez m'expliquer un peu plus? Je n'ai pas bien compris, vous pensez que je devrais remplacer char par byte?
    Que donne le select suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQL 1> SELECT * FROM NLS_DATABASE_PARAMETERS;
     
    PARAMETER********************* VALUE
    ------------------------------ --------------------------------------
    NLS_CHARACTERSET************** AL32UTF8 -- mutli-byte
    NLS_LENGTH_SEMANTICS********** CHAR
    Il faut savoir si vous êtes en multi-bytes ou en single-byte. En effet,en mutli-bytes, un caractère peut contenir jusqu'à 4 bytes. Ce qui pourrait expliquer pourquoi un id de 6 caractères ne rentre pas dans un id défini en 7 caractères

    Selon votre réponse il faudra (a) soit adapter la definition des colonnes (b) soit changer le caractère set.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE REFPAMUSER.E_PERSONNE
    (
    	ID                      VARCHAR2(7   CHAR),
    	NOM         VARCHAR2(64  CHAR),
    	PRENOM     VARCHAR2(64  CHAR),
    	EMAIL      VARCHAR2(128 CHAR),
    	ADRESSE   VARCHAR2(200 CHAR)
    )
    Il ya trop peu d'information pour savoir exactement ce qui se passe dans votre cas

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Le "SELECT * FROM NLS_DATABASE_PARAMETERS;" me donne :

    NLS_CHARACTERSET -> AL32UTF8
    NLS_LENGTH_SEMANTICS -> BYTE

    Si vous avez besoin d'autres informations dites moi lesquelles, et merci bcp de votre aide.

    Cordialement.

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Vérifiez le contenu du votre fichier. Il est très probable que le caractère séparateur n’est pas toujours « ; ». Le message
    ORA-12899: value too large for column ID (actual: 91, maximum: 7)
    indique qu'il a accumulé 91 caractères pour la colonne ID entre deux séparateurs « ; »

  9. #9
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pour restreindre le problème, mettre un reject à 1, et lire le bad_file (file1.bad)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      badfile   BAD_DIR:'file1.bad'
    ...  )
      REJECT LIMIT 1;

Discussions similaires

  1. [MySQL] Une erreur de syntaxe que je n'arrive pas à voir
    Par herzak dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/09/2009, 16h04
  2. Réponses: 2
    Dernier message: 22/01/2009, 16h29
  3. Message d'erreur que je n'arrive pas à résoudre
    Par MAMIKA dans le forum MATLAB
    Réponses: 5
    Dernier message: 15/09/2008, 13h17
  4. Erreur de syntaxe que je n'arrive pas à trouver
    Par pierrot10 dans le forum Langage
    Réponses: 3
    Dernier message: 12/07/2008, 00h28
  5. Réponses: 4
    Dernier message: 14/09/2007, 17h14

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