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 :

[Sql] Insert et ORA-01401


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut [Sql] Insert et ORA-01401
    bonjour,

    je dois inserer des données sur une table Oracle.Il ya un champ où il me signale à chaque fois "valeur insérée triop garnde pour champ" . Alors que le champ est de type varchar2(50) et aussi le nombre de caratéres que je veux y mettre est exactemment égal à 50 pile . aloe=rs je voudrais savoir ou est probléme.


    merci de me doner une solution là-dessus

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Est-ce que vous pouvez reproduire le problème avec un script SQL ?
    Postez votre code avec;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    desc <table concernée>
    Cela peut dépendre du jeu de caractères utilisé par la base.
    Que donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from nls_database_parameters;

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut
    je crois que exatemment que ça dépend du code caractéres utilisé car le champ qu'il me dit trop long , n'a pa dépassé du tout le nombre de caractéres
    Et là, je pense qu'il y a quelques caractéres qui le dérangent
    comme genre : °,x ...ec
    Toutefois j'ai fait le select : select * from nls_database_parameters et vois les recultats qu'il me donne
    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
     
    NLS_TIME_TZ_FORMAT
    HH.MI.SSXFF AM TZR
     
     
    NLS_NCHA
    FALSE
     
     
    NLS_COMP
    BINARY
     
    NLS_NC
    UTF8
     
    NLS_RDBMS_VERSION
    9.2.0.1.0

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Ce serait plus clair si on on avait quelque chose comme ç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
    25
    26
    27
    28
    29
     
     
    SQL> select * from nls_database_parameters;
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CURRENCY                   $
    NLS_ISO_CURRENCY               AMERICA
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CHARACTERSET               WE8MSWIN1252
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD-MON-RR
    NLS_DATE_LANGUAGE              AMERICAN
    NLS_SORT                       BINARY
    NLS_TIME_FORMAT                HH.MI.SSXFF AM
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY              $
    NLS_COMP                       BINARY
    NLS_LENGTH_SEMANTICS           BYTE
    NLS_NCHAR_CONV_EXCP            FALSE
    NLS_NCHAR_CHARACTERSET         AL16UTF16
    NLS_RDBMS_VERSION              10.1.0.2.0

    Pour résoudre votre problème vous pouvez essayer de modifier la colonne pour demander à stocker 50 caractères et non 50 octets (c'est le paramètre NLS_CHAR_SEMANTICS qui définit si une colonne VARCHAR2(50) peut contenir 50 caractères ou 50 octets).


    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
    SQL> create table t(c varchar2(50));
    
    Table created.
    
    SQL> insert into t values('aaa');
    
    1 row created.
    
    SQL> desc t;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
    
     C                                                  VARCHAR2(50)
    
    SQL> commit;
    
    Commit complete.
    
    SQL> alter table t modify c varchar2(50 char);
    Table altered.
    
    SQL> desc t;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
    
     C                                                  VARCHAR2(50 CHAR)
    
    SQL>

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut
    merci pour l'aide; bon j'ai modifié le type de colonne comme varchar2(50 CHAR) auliue de de varchar2(50) et çà marche bien. Mais est_ce qu'il ne serait pas possible de changer le mode caractére utilisé par la base de données aulieu de changer le type de colonne car c'est pour un souci de compatibilité avec une autre base de données.


    Merci d'une précision.

    Vous avez remarqué que le code de cartére est bien UTF8.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Oui, c'est possible en changeant le paramètre d'initialisation NLS_CHAR_SEMANTICS (=CHAR) qui sera pris en compte pour toutes les nouvelles tables créées. Je ne crois pas qu'il est pris en compte pour les tables existantes.

Discussions similaires

  1. ORA-01401 : inserted value too large for column
    Par Mattgic dans le forum Oracle
    Réponses: 5
    Dernier message: 25/05/2010, 10h18
  2. Réponses: 2
    Dernier message: 30/09/2005, 15h41
  3. Multiplier les And dans Sql Insert Into
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 23/09/2005, 21h55
  4. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  5. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 11h38

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