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

PL/SQL Oracle Discussion :

Chaîne de caractères plus longue que prévu


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Chaîne de caractères plus longue que prévu
    Bonjour,
    Je programme un outils en pl/sql. Il marchait très bien et tous a coup alors que je n'ai rien changer dans le code j'ai une erreur disant que une de mes variables varchar2 est trop petite pour ce que je veu mettre dedans j'ai été obliger de la passer de 250 à 1000 pour qu'elle marche.
    Quand j'affiche ma requete avec sa taille via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     dbms_output.put_line(length(req) || req);
    j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create table account_t
                                                                  as select * from
    account_t
                                                 @TO_DB2 where 1=2
    je pense que le problème viens de l'encodage que j'utilise mais j'aimerai avoir vos idées car je comprend pas pourquoi en changent mon encodage tous se met a planté.

    Je travail sur Oracle 10g.

  2. #2
    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 flachgreg Voir le message
    Bonjour,
    Je programme un outils en pl/sql. Il marchait très bien et tous a coup alors que je n'ai rien changer dans le code j'ai une erreur disant que une de mes variables varchar2 est trop petite pour ce que je veu mettre dedans j'ai été obliger de la passer de 250 à 1000 pour qu'elle marche.

    je pense que le problème viens de l'encodage que j'utilise mais j'aimerai avoir vos idées car je comprend pas pourquoi en changent mon encodage tous se met a planté.

    Je travail sur Oracle 10g.
    250 * 4 = 1000.

    Ca sent un NLS Character Set du type "Mutli-Byte".

    Pouvez-vous poster ceci:

    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
     
    SQL> select * from nls_database_parameters;
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_NCHAR_CHARACTERSET         AL16UTF16
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CURRENCY                   $
    NLS_ISO_CURRENCY               AMERICA
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CHARACTERSET               WE8ISO8859P1
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD-MON-RR
    NLS_DATE_LANGUAGE              AMERICAN
    NLS_SORT                       BINARY
    NLS_TIME_FORMAT                HH.MI.SSXFF AM
    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_RDBMS_VERSION              10.2.0.4.0
     
    20 rows selected.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    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
    NLS_LANGUAGE	AMERICAN
    NLS_TERRITORY	AMERICA
    NLS_CURRENCY	$
    NLS_ISO_CURRENCY	AMERICA
    NLS_NUMERIC_CHARACTERS	.,
    NLS_CHARACTERSET	UTF8
    NLS_CALENDAR	GREGORIAN
    NLS_DATE_FORMAT	DD-MON-RR
    NLS_DATE_LANGUAGE	AMERICAN
    NLS_SORT	BINARY
    NLS_TIME_FORMAT	HH.MI.SSXFF AM
    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	UTF8
    NLS_RDBMS_VERSION	10.2.0.4.0

  4. #4
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut un lien utile pour les NLS_character

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NLS_CHARACTERSET	UTF8
    NLS_LENGTH_SEMANTICS	BYTE
    Vous utilisez UTF8 qui est un ''character set'' qui permet de stoker plusieurs bytes de données (multi-byte).

    Si dans votre ancien ''character set'' du type ''single-byte'' vous aviez un champ défini comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    VARCHAR2(250 BYTE)
    Alors, les 250 caractères qui avaient l’habitude de se contenter des 250 BYTE ne peuvent plus se suffir de ces 250 caractères. En effet dans le nouveau ''charater set'' un ''byte'' peut contenir de 1 à 4 caractères.

    Votre solution serait de redéfinir votre champs soit en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        VARCHAR2 (250 CHAR)
    ou soit en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      VARCHAR2 (250*4 BYTE) ---> VARCHAR2(1000 BYTE)

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre aide, j'ai fini par trouver mon erreur qui n'avait rien a voir avec l'encodage finalement mais merci quand même

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Points : 50
    Points
    50
    Par défaut
    C'était juste une donnée trop longue ou c'était un problème plus technique que ça ?
    Si c'est technique, tu veux bien nous détailler la raison ? Ça pourrait servir à d'autres

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    en faite j'exportait les données d'une table dans un .csv avant de les réimporter via sql loader et j'avais oublier un ; dans ma procedure d'exportation du coup a l'importation sqloader prenait les 160 espace après ma valeur ce qui faisait donc planter une autre fonction
    voila voila

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

Discussions similaires

  1. [XL-2003] problème fso move chaîne de caractères trop longue
    Par MarcelG dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/01/2012, 12h17
  2. Insert PostgreSQL plus longue que mySql ou H2
    Par dormilon dans le forum Débuter
    Réponses: 9
    Dernier message: 24/11/2009, 09h16
  3. Réponses: 2
    Dernier message: 07/08/2009, 12h42
  4. Tester si une chaîne de caractère ne contient que des numéros.
    Par sasy22 dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 07/04/2008, 18h05
  5. Réponses: 4
    Dernier message: 25/09/2007, 12h59

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