Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/11/2012, 02h21   #1
brlagl
Invité de passage
 
Inscription : novembre 2012
Messages : 4
Détails du profil
Informations professionnelles :
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : novembre 2012
Messages : 4
Points : 1
Points : 1
Par défaut Format Date Abrégé

Bonjour,

Je souhaite récupérer la valeur du jour au format abrégé Oracle mais j'obtiens des valeurs différentes en fonction de la base sur laquelle je travaille. J'utilise la fonction suivante :

Code :
SELECT to_char(sysdate,'DY','NLS_DATE_LANGUAGE=''FRENCH''') INTO myday FROM dual;
Cette requête retourne la valeur "SA" sur une base 9i mais elle retourne "SAM." sur une base 11g.
Je ne comprends pas d'où peut provenir cette différence de résultat.

Lorsque j'utilise un autre langage que le français, je n'ai aucune différence de résultat entre les deux versions.

Avez-vous une piste, une idée ?

Merci
brlagl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2012, 09h27   #2
amir.
Membre habitué
 
Inscription : septembre 2010
Messages : 74
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 74
Points : 115
Points : 115
Salut brlagl,

Je n'ai pas d'Oracle 9i pour tester ta requête. Mais, si tu as effectivement la même requête renvoyant deux résultat différents sous deux versions différentes alors je te conseillerai d'appeler le support Oracle.

Quoiqu'il en soit, je vois que tu retourne ce jour dans une variable. Personnellement, je pense que tu devrais utiliser le numéro du jour. Ainsi, tu restes indépendant de la langue. Quelque chose comme:
Code :
SELECT 1 + FLOOR (SYSDATE - TRUNC (SYSDATE, 'IW')) FROM dual;
.

Te renverra toujours 1 si le jour est lundi et 7 si c'est dimanche. Peu importe les paramètres de la session ou de la base de données. Mieux vaut toujours préférer une solution indépendante de tout paramètres NLS_. Tu peux jamais être certain que ceux-ci ne changeront pas au niveau des sessions ou de ta base.


A+
amir. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2012, 18h19   #3
Pomalaix
Rédacteur
 
Inscription : décembre 2002
Messages : 2 651
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 651
Points : 4 123
Points : 4 123
Citation:
Envoyé par brlagl Voir le message
Bonjour,

Je souhaite récupérer la valeur du jour au format abrégé Oracle mais j'obtiens des valeurs différentes en fonction de la base sur laquelle je travaille. J'utilise la fonction suivante :

select to_char(sysdate,'DY','NLS_DATE_LANGUAGE=''FRENCH''') into myday from dual;

Cette requête retourne la valeur "SA" sur une base 9i mais elle retourne "SAM." sur une base 11g.
Je ne comprends pas d'où peut provenir cette différence de résultat.

Lorsque j'utilise un autre langage que le français, je n'ai aucune différence de résultat entre les deux versions.

Avez-vous une piste, une idée ?

Merci
Effectivement, il y a eu un changement dans l'abréviation des jours de semaine et des noms de mois en français (et peut-être d'autres langues), qui est intervenue sous Oracle 10g, me semble-t-il, et pour une raison que j'ignore.

Donc il faut adopter les nouveaux formats.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 17/11/2012, 18h21   #4
Pomalaix
Rédacteur
 
Inscription : décembre 2002
Messages : 2 651
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 651
Points : 4 123
Points : 4 123
Citation:
Envoyé par amir. Voir le message
Te renverra toujours 1 si le jour est lundi et 7 si c'est dimanche. Peu importe les paramètres de la session ou de la base de données. Mieux vaut toujours préférer une solution indépendante de tout paramètres NLS_.
C'est malheureusement complètement faux, comme j'avais eu l'occasion de le montrer ici : http://www.developpez.net/forums/d87...e/#post4988269
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2012, 19h10   #5
amir.
Membre habitué
 
Inscription : septembre 2010
Messages : 74
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 74
Points : 115
Points : 115
Citation:
Envoyé par Pomalaix Voir le message
C'est malheureusement complètement faux, comme j'avais eu l'occasion de le montrer ici : http://www.developpez.net/forums/d87...e/#post4988269

Alors si je peux me permettre... Une année ISO commence toujours un lundi et termine toujours un dimanche. Peu importe le pays, la langue ou la configuration de l'utilisateur. Est-ce que vous avez un exemple qui en jouant sur les paramètres NLS (comme dans votre exemple listé) me reverrait un chiffre différent de 1 à 7 (1=lundi et 7=Dimanche) pour la requête suivante??

Code :
1
2
3
4
 
-- ALTER SESSION SET nls_territory = ALGERIA; AMERICA... 
SELECT 1 + FLOOR (SYSDATE - TRUNC (SYSDATE, 'IW')) 
  FROM dual;
Merci
amir. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/11/2012, 15h31   #6
brlagl
Invité de passage
 
Inscription : novembre 2012
Messages : 4
Détails du profil
Informations professionnelles :
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : novembre 2012
Messages : 4
Points : 1
Points : 1
Merci pour vos réponses, je vois que je n'ai apparemment pas d'autre choix que de m'adapter à ce nouveau format de date abrégé...
brlagl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2012, 23h53   #7
Pomalaix
Rédacteur
 
Inscription : décembre 2002
Messages : 2 651
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 651
Points : 4 123
Points : 4 123
Citation:
Envoyé par amir. Voir le message
Code :
1
2
3
-- ALTER SESSION SET nls_territory = ALGERIA; AMERICA... 
SELECT 1 + FLOOR (SYSDATE - TRUNC (SYSDATE, 'IW')) 
  FROM dual;
J'ai eu le grand tort de répondre trop vite après une lecture en diagonale, sans m'arrêter sur votre formule, et en fonçant sur la phrase finale.

Et effectivement, je n'ai pas d'exemple à vous proposer qui la prenne en défaut !

Mes excuses donc, et coup de chapeau pour cette formule indépendante du paramétrage NLS.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2012, 12h19   #8
brlagl
Invité de passage
 
Inscription : novembre 2012
Messages : 4
Détails du profil
Informations professionnelles :
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : novembre 2012
Messages : 4
Points : 1
Points : 1
Citation:
Envoyé par Pomalaix Voir le message
Effectivement, il y a eu un changement dans l'abréviation des jours de semaine et des noms de mois en français (et peut-être d'autres langues), qui est intervenue sous Oracle 10g, me semble-t-il, et pour une raison que j'ignore.

Donc il faut adopter les nouveaux formats.
As-tu une documentation sur ce sujet stp ? J'ai beau chercher sur le support d'Oracle, je n'ai encore rien trouvé qui mentionne ce changement.
brlagl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2012, 14h00   #9
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 104
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 4 104
Points : 7 994
Points : 7 994
Updates to the Oracle Language and Territory Definition Files
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/11/2012, 10h18   #10
brlagl
Invité de passage
 
Inscription : novembre 2012
Messages : 4
Détails du profil
Informations professionnelles :
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : novembre 2012
Messages : 4
Points : 1
Points : 1
Merci à vous pour ces informations.
Je vais donc changer le code de l'application.
brlagl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2012, 18h35   #11
Pomalaix
Rédacteur
 
Inscription : décembre 2002
Messages : 2 651
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 651
Points : 4 123
Points : 4 123
Pour ceux qui voudraient creuser le sujet, il y a une note Metalink dédiée aux changements NLS intervenus en 10g : 292942.1.

On y apprend par exemple que la liste des modifications figure dans ORACLE_HOME/nls/data/old/data_changes.htm
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h51.


 
 
 
 
Partenaires

Hébergement Web