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] Format d'affichage de virgule


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 29
    Par défaut [Sql] Format d'affichage de virgule
    Bonjour à tous,

    J'accède à une base Oracle depuis mon code java ... or, lorsque j'affiche directement la valeur que j'extrait de la base j'ai un probleme avec les nombres à virgule inferieurs à 1 : 0.5 s'affoche .5 par exemple !!

    Je me demande si c'est pas un probleme de version du langage d'installation d'oracle ...

    Je pourrai regler ce probleme d'affichage en bidouillant en Java le resultat de ma requete mais le plus simple serait surement de changer la config dans oracle pour qu'il me renvoie le bon format ...

    Pouvez vous m'aider plz??

    Merci !!

  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
    Peux-tu envoyer le résultat de la requête suivante exécutée avec le même environnement Oracle client que ton programme java:

    select * from nls_session_parameters;

    ainsi que select * from v$version;

  3. #3
    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
    Je ne suis pas sûr que cela dépend d'un paramètre NLS. Tu peux aussi essayer de modifier la requête SQL avec TO_CHAR:

    select to_char(x, '0.0') from test


    fonctionne avec un environnement NLS français 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
    SQL> select * from nls_session_parameters;
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_LANGUAGE                   FRENCH
    NLS_TERRITORY                  FRANCE
    NLS_CURRENCY                   ┐
    NLS_ISO_CURRENCY               FRANCE
    NLS_NUMERIC_CHARACTERS         ,.
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD/MM/RR
    NLS_DATE_LANGUAGE              FRENCH
    NLS_SORT                       FRENCH
    NLS_TIME_FORMAT                HH24:MI:SSXFF
    NLS_TIMESTAMP_FORMAT           DD/MM/RR HH24:MI:SSXFF
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_TIME_TZ_FORMAT             HH24:MI:SSXFF TZR
    NLS_TIMESTAMP_TZ_FORMAT        DD/MM/RR HH24:MI:SSXFF TZR
    NLS_DUAL_CURRENCY              ┐
    NLS_COMP                       BINARY
    NLS_LENGTH_SEMANTICS           BYTE
    NLS_NCHAR_CONV_EXCP            FALSE
     
    17 rows selected

  4. #4
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 29
    Par défaut
    Voilà pour la premiere requete :

    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
    PARAMETER	VALUE
    NLS_LANGUAGE	FRENCH
    NLS_TERRITORY	FRANCE
    NLS_CURRENCY	F
    NLS_ISO_CURRENCY	FRANCE
    NLS_NUMERIC_CHARACTERS	,.
    NLS_CALENDAR	GREGORIAN
    NLS_DATE_FORMAT	DD/MM/RR
    NLS_DATE_LANGUAGE	FRENCH
    NLS_SORT	FRENCH
    NLS_TIME_FORMAT	HH24:MI:SSXFF
    NLS_TIMESTAMP_FORMAT	DD/MM/RR HH24:MI:SSXFF
    NLS_TIME_TZ_FORMAT	HH24:MI:SSXFF TZH:TZM
    NLS_TIMESTAMP_TZ_FORMAT	DD/MM/RR HH24:MI:SSXFF TZH:TZM
    NLS_DUAL_CURRENCY	¿
    NLS_COMP	BINARY
    Et la deuxieme donne :

    BANNER

    Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
    PL/SQL Release 8.1.7.4.0 - Production
    CORE 8.1.7.0.0 Production
    TNS for HPUX: Version 8.1.7.4.0 - Production
    NLSRTL Version 3.4.1.0.0 - Production

  5. #5
    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
    Je confirme que le format d'affichage d'un nombre n'est pris en compte par les paramètres NLS.

    Le lien vers chapitre 2 du Oracle8i SQL Reference confirme ceci

    http://<br /> http://download-west....elem.htm#34572

    Par compte le format d'affichage d'une DATE est pris en compte par les paramètres NLS (lire la suite du document).

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    C'est pas un problème de masque de format ?
    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
    8i CYRIL> select *
      2  from dvp;
     
             X
    ----------
            12
         1,123
          ,012
     
    3 ligne(s) sélectionnée(s).
     
    8i CYRIL> select to_char(x, '9990.9990')
      2  from dvp;
     
    TO_CHAR(X,
    ----------
       12.0000
        1.1230
        0.0120
     
    3 ligne(s) sélectionnée(s).

  7. #7
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    En dehors de tout formattage express par l'appel de TO_CHAR, le format utilisé (pour les dates ou les nombres), dépend du territoire (2nd champs de la variable NLS_LANG) ou de variables qui peuvent être surchargées manuellement tels que NLS_NUMERIC_CHARACTERS.
    Et ça marche en 8i :
    SQL> show release
    release 801070400
    SQL> show parameter nls_numeric_characters

    NAME TYPE VALUE
    ------------------------------------ ------- ------------------------------
    nls_numeric_characters string

    SQL> select 123/10 from dual;

    123/10
    ----------
    12,3

    SQL> alter session set nls_numeric_characters='. ';

    Session altered.

    SQL> select 123/10 from dual;

    123/10
    ----------
    12.3

  8. #8
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 29
    Par défaut
    Merci pour vos reponses.

    Mais qu'est e qui pourrait faire qu'entre deux versions d'oracles (sur deux serveurs différents) on ait 0.5 et .5 ??

    J'edite ce message parcequ'il est faux!! j'attaque une seule base oracle ... c'est le client qui change.

  9. #9
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Ce n'est pas tant une question de serveurs qu'une question de client !

    Tout dépend de la façon dont le programme client a positionné sa variable NLS_LANG ... ;-)

  10. #10
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 29
    Par défaut
    Je travaille avec WSAD (websphere) en local et j'accede à ma base oracle en java ... j'affiche le resultat de ma requete et ça me donne bien 0.5 !

    Je met mon EAR sur un serveur de dev, j'accede à la meme base oracle mais cette fois ça affiche .5 !

    Cette fameuse variable NLS_LANG, où est ce que je peux la trouver?

  11. #11
    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
    sous UNIX, NLS_LANG est une variable d'environnement, sous Windows elle dans le registre : la commande SQL SELECT * FROM nls_session_parameters la prend en compte ainsi que d'éventuelles d'autres modifications de la session du type ALTER SESSION.

    Est-sur qu'il n'y a pas un formatage avec TO_CHAR quelque part ?
    Peux-tu nous donner:
    - le résultat des tes 2 SELECT
    - le résultat des 2 commandes SQL avec SELECT * FROM nls_session_parameters
    - as-tu des directives dans sqlplus de type login.sql ou COLUMN ... qui pourraient redéfinir le format affiché pour les nombres ?

  12. #12
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 29
    Par défaut
    Je vais essayer de repondre à tes questions :

    Est-sur qu'il n'y a pas un formatage avec TO_CHAR quelque part ?
    Il n'y a aucun formatage avec to_char ...
    D'autre part, j'ai réussi à contourner le probleme justement avec un to_char(x, 9990,00) mais j'aimerai bien savoir l'origine de ce probleme quand meme!

    - le résultat des tes 2 SELECT
    Euh ... mes deux select??

    - le résultat des 2 commandes SQL avec SELECT * FROM nls_session_parameters
    Sur le serveur oracle, cette requete renvoie :

    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
    NLS_LANGUAGE	FRENCH
    NLS_TERRITORY	FRANCE
    NLS_CURRENCY	F
    NLS_ISO_CURRENCY	FRANCE
    NLS_NUMERIC_CHARACTERS	,.
    NLS_CALENDAR	GREGORIAN
    NLS_DATE_FORMAT	DD/MM/RR
    NLS_DATE_LANGUAGE	FRENCH
    NLS_SORT	FRENCH
    NLS_TIME_FORMAT	HH24:MI:SSXFF
    NLS_TIMESTAMP_FORMAT	DD/MM/RR HH24:MI:SSXFF
    NLS_TIME_TZ_FORMAT	HH24:MI:SSXFF TZH:TZM
    NLS_TIMESTAMP_TZ_FORMAT	DD/MM/RR HH24:MI:SSXFF TZH:TZM
    NLS_DUAL_CURRENCY	?
    NLS_COMP	BINARY

    - as-tu des directives dans sqlplus de type login.sql ou COLUMN ... qui pourraient redéfinir le format affiché pour les nombres ?
    non.


  13. #13
    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
    En quoi les clients diffèrent-ils?
    - est-ce que le client est sqlplus ou Java ou les 2 ?
    - quelles sont les versions de sqlplus ?
    - quelles sont les versions de Java ?
    - Unix ? Windows ?

    :

  14. #14
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 29
    Par défaut
    Je vais faire un schema simple de mon environnement, qui j'espere repondra à toutes ces questions :

    Je travaille sur un poste sous Windows XP, avec WSAD et donc le serveur d'appli est sur mon poste.
    Je lance mon appli, qui fait quand meme un accès "exterieur" vers la base de données qui se trouve sur un serveur sous UNIX.
    Dans ce cas l'affichage est correct : j'ai bien 0.5


    Je fait un EAR, je le déploie sur un serveur d'appli (sous UNIX). Et de mon poste, j'accede à mon application web. Je fais donc le meme accès à la meme base de donnée que ci dessus.
    Mais dans ce cas, ça m'affiche .5 !!!!

    Dans les deux cas, le client est donc Java.
    Sur le poste j'ai : 1.5.0_06-b05
    Sur le serveur d'appli j'ai : 1.4.2_02-b03

    Est ce que ça peut etre dû à la version de java qui différe?

  15. #15
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Au niveau de Windows ou d'Unix, si le NLS_LANG n'est pas spécifié pour le compte qui lance les process, il y a des valeurs par défauts qui sont prises en déduction des variables LC...

    il faut donc toujours expressement positionner le NLS_LANG avant de lancer les processes !

  16. #16
    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
    Je ne connais pas assez Java pour répondre.
    On pourrait essayer de continuer à analyser le problem avec sqlplus mais il faudrait être sûr que sqlplus utilise le même driver et la même config. que ton code Java. Je ne sais pas faire.

    Désolé.


  17. #17
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 29
    Par défaut
    Bon ba, merci à vous ...

    Je vais en rester sur ma solution de contournement avec to_char, non sans regret !

    A+

  18. #18
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    NON !!! C'est une bêtise !!!!

    Il suffit de positionner 2 variables par deux commandes ALTER SESSION !!!
    Vous pouvez même l'automatiser par des triggers AFTER LOGON.

    Ce n'est pas compliqué de bien faire les choses... :-)

  19. #19
    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
    Mais quelles sont ces commandes ?
    Quelle est la valeur de NLS_LANG qui modifie l'affiche des premiers zéros
    (leading zeros) pour un nombre ?

    Merci de nous donner la solution !

  20. #20
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    En ce qui concerne les leading zeros (000951 au lieu de 951), c'est clairement une histoire de TO_CHAR. Mais je ne vois nulle trace de leading zeros dans le thread ici présent, uniquement une histoire de séparareur décimal...

    Mais qu'est e qui pourrait faire qu'entre deux versions d'oracles (sur deux serveurs différents) on ait 0.5 et .5 ??
    Et ça, c'est du NLS_NUMERIC_CHARACTERS à 100% !!!
    (et la solution est uniquement de modifier le paramétrage NLS; la technique du TO_CHAR est un moyen de contournement inélégant et handicapant).
    parce que le to_char, pour marcher, va devoir être combiné avec un replace, qui va marcher une fois sur deux, ...

Discussions similaires

  1. [AC-2010] SQL: Format oui/non, contrôle d'affichage
    Par myrddin99 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/05/2014, 17h19
  2. [VxiR2] Format d'affichage d'un chiffre: virgule à la place de point
    Par tatayoyo dans le forum Deski
    Réponses: 8
    Dernier message: 14/10/2009, 16h26
  3. Réponses: 5
    Dernier message: 24/11/2007, 14h18
  4. [CR8] Problème de Format d'affichage
    Par khabch dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 19/02/2004, 14h10
  5. [VB6] [Flexgrid] Format d'affichage des numériques
    Par yansolo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/10/2002, 21h00

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