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 Oracle Discussion :

comportement étrange de la fonction to_char


Sujet :

SQL Oracle

  1. #1
    Membre du Club Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Points : 52
    Points
    52
    Par défaut comportement étrange de la fonction to_char
    Bonjour, je viens de m'apercevoir que la fonction to_char (date), avait une mise en forme différente sur 2 bases de données censées être les mêmes.

    Voici le résultat sur la base , comme il a toujours été :

    Code sql : 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
     
    QL*Plus: Release 9.2.0.1.0 - Production on Je Dec 3 16:10:21 2009
     
    Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
     
     
    Connecté à :
    Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.7.0 - Production
     
    SQL> select idf_agent,to_char(agtgrd.dat_debut,'DD/MM/YYYY'),dat_fin  from agtgrd
      2  where idf_agent=482;
     
     IDF_AGENT TO_CHAR(AG DAT_FIN
    ---------- ---------- --------
           482 01/06/1990 01/12/00

    J'ai au passage vérifie le cursor sharing (suite à lecture d'un post de 2005,
    http://www.developpez.net/forums/d69...quete-etrange/ ) et là j'obtiens:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> show parameters cursor
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    cursor_sharing                       string      EXACT

    Par contre sur la base ou cursor sharing est à force:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> show parameters cursor
     
    NAME                                 TYPE
    ------------------------------------ --------------------------------
    VALUE
    ------------------------------
    cursor_sharing                       string
    FORCE
    On remarque que l'affichage est là aussi impacté.

    Puis pour ma requête :

    Code sql : 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
     
     
    SQL*Plus: Release 9.2.0.1.0 - Production on Je Dec 3 16:08:28 2009
     
    Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
     
     
    Connecté à :
    Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.7.0 - Production
     
    SQL> select idf_agent,to_char(agtgrd.dat_debut,'DD/MM/YYYY'),dat_fin  from agtgrd
      2  where idf_agent=482;
     
     IDF_AGENT
    ----------
    TO_CHAR(AGTGRD.DAT_DEBUT,'DD/M
    ---------------------------------------------------------------------------
    DAT_FIN
    --------
           482
    01/06/1990
    01/12/00

    Qui aurait une explication à ce changement de mise en forme?
    SGDR: Oracle 9.2
    OS: Solaris 10

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est du paramétrage SQL*Plus sur la longueur des colonnes, à mon avis rien à voir avec to_char ou du cursor sharing.

  3. #3
    Membre du Club Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Points : 52
    Points
    52
    Par défaut
    Pourtant aucun pramétrage n'a été définit pour la largeur des colonnes.

    Dans le cas d'une fonction to_char:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select to_char(agtgrd.dat_debut,'DD/MM/YYYY') from agtgrd

    la colonne dat_debut est une date. Y-aurait-il une variable qui définit la largeur par défaut des retour de fonctions?

    Parce que j'ai regardé les variables NLS,et les variables définies dans la session, ceux sont les mêmes.
    SGDR: Oracle 9.2
    OS: Solaris 10

  4. #4
    Membre du Club Avatar de pascal_T
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 95
    Points : 52
    Points
    52
    Par défaut
    Je viens de faire la test suivant sur la base qui me "perturbe".

    je vérifie le cursor_sharing:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    QL> show parameters cursor
     
    NAME                                 TYPE
    ------------------------------------ --------------------------------
    VALUE
    ------------------------------
    cursor_sharing                       string
    FORCE
    cursor_space_for_time                boolean
    FALSE
    open_cursors                         integer
    1200
    session_cached_cursors               integer
    100

    Puis je le mets à exact :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> alter system set cursor_sharing=exact scope=both;
     
    Système modifié.
     
    SQL> show parameters cursor
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    cursor_sharing                       string      EXACT
    cursor_space_for_time                boolean     FALSE
    open_cursors                         integer     1200
    session_cached_cursors               integer     100

    Là l'affichage se modifie, sans avoir rien touché d'autre.

    Je vérifie alors avec ma fonction to_char:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> select to_char(sysdate,'DD/MM/YYYY') from dual;
     
    TO_CHAR(SY
    ----------
    04/12/2009

    C'est bien comme je veux.

    Donc je me remets en "FORCE":
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL> alter system set cursor_sharing=force scope=both;
     
    Système modifié.

    Puis je revérifie ma fonction to_char:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL> select to_char(sysdate,'DD/MM/YYYY') from dual;
     
    TO_CHAR(SYSDATE,'DD/MM/YYYY')
    ---------------------------------------------------------------------------
    04/12/2009

    Et là je ne comprends plus rien
    SGDR: Oracle 9.2
    OS: Solaris 10

Discussions similaires

  1. Comportement étrange de la fonction SUM()
    Par feldi dans le forum SQL
    Réponses: 6
    Dernier message: 18/01/2012, 11h10
  2. Fonction grep - comportement étrange
    Par pleiade dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 19/11/2008, 19h07
  3. comportement étrange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 10/02/2005, 21h27
  4. [Système][Runtime][Exec] Comportement étrange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2004, 09h54
  5. Réponses: 2
    Dernier message: 22/09/2003, 11h23

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