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 :

Pb au niveau du premier jour de la semaine avec nls lang = AR8MWSIN1256


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 34
    Par défaut Pb au niveau du premier jour de la semaine avec nls lang = AR8MWSIN1256
    Bonjour à tous,

    J'ai un problème au niveau du premier Jour de la semaine quand je suis sur une base (ORACLE DATABASE 10G) avec un nls_lang AR8MSWIN1256.

    Au fait, je veux que le premier jour de la semaine soit LUNDI et ce, de façon fixe dans la base de données ORACLE.
    Hors, oracle considère par exemple qu'aujourd'hui, mercredi, c'est le 5ème jour de la semaine et non le 3ème.

    Je sais que vu que j'utilise le nls lang ARABE_TUNISIA.AR8MSWIN1256 que pour Oracle, tous les pays arabes, par défaut le premier jour de la semaine c'est samedi et non lundi. Seulement, en Tunisie, le premier jour de la semaine c'est lundi.

    J'ai pensé qu'en modifiant le NLS_TERRITORY dans la table PROPS$ en mettant FRANCE comme valeur sous oracle, le problème serait résolu.

    Voilà ce que j'ai dans PROP$ (si vous pensez comme moi qu'en modifiant ici un paramètre cela réglerait tout) :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    SQL> select * from PROPS$;
     
    NAME                           VALUE$                                                                   
    ------------------------------ ---------------------------------------------------------------------
    DICT.BASE                      2                                                                        
    DEFAULT_TEMP_TABLESPACE        TEMP                                                                     
    DEFAULT_PERMANENT_TABLESPACE   USERS                                                                    
    DEFAULT_TBS_TYPE               SMALLFILE                                                                
    NLS_LANGUAGE                   AMERICAN                                                                 
    NLS_TERRITORY                  FRANCE                                                                   
    NLS_CURRENCY                   $                                                                        
    NLS_ISO_CURRENCY               AMERICA                                                                  
    NLS_NUMERIC_CHARACTERS         .,                                                                       
    NLS_CHARACTERSET               AR8MSWIN1256                                                             
    NLS_CALENDAR                   GREGORIAN                                                                
     
    NAME                           VALUE$                                                                   
    ------------------------------ ---------------------------------------------------------------------
    NLS_DATE_FORMAT                DD/MM/RRRR                                                               
    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                                                                    
     
    NAME                           VALUE$                                                                   
    ------------------------------ ---------------------------------------------------------------------
    NLS_NCHAR_CHARACTERSET         AL16UTF16                                                                
    NLS_RDBMS_VERSION              10.2.0.1.0                                                               
    GLOBAL_DB_NAME                 SISRT.REGRESS.RDBMS.DEV.US.ORACLE.COM                                    
    EXPORT_VIEWS_VERSION           8                                                                        
    DBTIMEZONE                     00:00                                                                    
     
    27 rows selected.
    Voici le résultat que j'obtiens en voulant voir le jour de la semaine d'aujourd'hui (mercredi 16 septebre 2009) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select to_number (to_char(sysdate,'D')) from dual;
     
    TO_NUMBER(TO_CHAR(SYSDATE,'D'))
    -------------------------------
                                  5
    Hors que si je faisais un simple alter session :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> alter session set NLS_TERRITORY=FRANCE;
     
    Session altered.
    j'obtiens bien 3 et non 5 (pour dire que mercredi est le 3ème jour de la semaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select to_number (to_char(sysdate,'D')) from dual;
     
    TO_NUMBER(TO_CHAR(SYSDATE,'D'))
    -------------------------------
                                  3
    Merci si vous pouvez m'aider à trouver une solution simple sachant qu'on a développé pas mal de programmes qui utilisent les jours calendaires ... (au niveau de la GRH, le calcul des congés, ...).



    Merci

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Que donne le code suivant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_number(to_char(sysdate,'D', 'NLS_DATE_LANGUAGE=French')) from dual

  3. #3
    Membre averti
    Inscrit en
    Février 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 34
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Que donne le code suivant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_number(to_char(sysdate,'D', 'NLS_DATE_LANGUAGE=French')) from dual
    cela donne aussi 5 chez moi

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Apparement seul le NLS_TERRITORY influence le calcul du numéro de jour dans la semaine.

    Si vous ne pouvez pas le changer pour d'autres implications, vous pouvez toujours faire un -2 modulo 7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select mod(to_number(to_char(sysdate,'D'))-2, 7) from dual

  5. #5
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    J'ai pensé qu'en modifiant le NLS_TERRITORY dans la table PROPS$ en mettant FRANCE comme valeur sous oracle, le problème serait résolu.
    Tu ne veux pas dire que tu t'es connecté en SYS et que tu as fait un update sur une table interne, non ?

    Sinon,
    Lorsque NLS_LANG est défini sur le client, il override les NLS_TERRITORY et NLS_LANGUAGE. Donc à ce moment là, c'est sur le client que tu dois modifier NLS_LANG ARABE_TUNISIA.AR8MSWIN1256 en ARABE_FRANCE.AR8MSWIN1256

    Cordialement,
    Franck.

  6. #6
    Membre averti
    Inscrit en
    Février 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 34
    Par défaut
    Citation Envoyé par pachot Voir le message
    Lorsque NLS_LANG est défini sur le client, il override les NLS_TERRITORY et NLS_LANGUAGE. Donc à ce moment là, c'est sur le client que tu dois modifier NLS_LANG ARABE_TUNISIA.AR8MSWIN1256 en ARABE_FRANCE.AR8MSWIN1256.

    Merci Franck et à tous ceux qui ont répondu à ce problème. La seule solution qui marche finalement est celle du NLS_LANG sur l'OAS. Effectivement Frank, en mettant ARABIC_FRANCE.AR8MSWIN1256 comme NLS_LANG, le premier jour de la semaine devient lundi

    Merci beaucoup

  7. #7
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Je t'ai suggéré celà pour t'expliquer d'où vient le résultat observé.
    Mais attention, dans ce cas l'affichage du numéro de jour dépends du client, ansi que tout ce qui dépends du TERRITORY.
    C'est souvent le but recherché: dans une appli multilingue, le format est adapté en fonction de chacun.

    Mais dans ton cas, vu que tu fais un to_number(), jce n'est peut_etre pas la bonne solution. Si c'est le cas, alors la meilleur solution est un alter session pour changer le NLS_TERRITORY

    Cordialement,
    Franck.

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

Discussions similaires

  1. [Dates] Comment obtenir le premier jour d'une semaine ?
    Par damien.vinouze dans le forum Langage
    Réponses: 8
    Dernier message: 09/05/2007, 08h26
  2. Calendar : Récupérer le premier jour de la semaine
    Par Sinan dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/05/2007, 15h51
  3. Réponses: 7
    Dernier message: 31/07/2006, 13h50
  4. Mettre lundi comme premier jour de la semaine?
    Par catoucat dans le forum Access
    Réponses: 2
    Dernier message: 14/06/2006, 07h05
  5. Récupérez premier jour de la semaine
    Par Krapulax dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/10/2003, 17h18

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