Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2011, 14h01   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 4
Points : 0
Points : 0
Par défaut Resultat différent entre client Unix et Windows

Bonjour,

J'exécute une requête SQL sur une base oracle 9.2.0.5 installée sur serveur Unix. L'ordre d'affichage des résultats est différent si le client oracle est sur Unix ou sur Windows. Le client Oracle sur Windows affiche dans l'ordre croissant la 1ere colonne IOLOTN (en fonction des autres paramètres de la commande).
Le client Oracle sur Unix affiche dans n'importe quel ordre la 1ere colonne IOLOTN (en fonction des autres paramètres de la commande).

Ci-dessous la requête que je ne peux pas modifier (hormis les valeurs).

Code :
1
2
3
SELECT IOLOTN, IOLOTS, IOMCU, IOITM, IOMMEJ
  FROM PRODDTA.F4108
 WHERE  ( IOITM = 716607.000000 AND IOMCU = '       01M01' ) AND  ( IOMMEJ >= 111089 AND IODLEJ <= 111089 )  ORDER BY IOITM ASC,IOMCU ASC,IOMMEJ ASC ;
La plan d'exécution indique que la requête utilise un index dont voici les paramètres.

Code :
1
2
3
IOITM	NUMBER	1
IOMCU	NCHAR	2
IOLOTN	NCHAR	3
Ci-dessous le résultat obtenu avec le client Unix. La 1ere colonne n'est pas classée par ordre croissant.

IOLOTN IOLOTS IOMCU IOITM IOMMEJ
------------------------------ ------ ------------ ---------- ----------
0786K 01M01 716607 113276
0786B 01M01 716607 113276
0786E 01M01 716607 113276


Cette différence d'affichage entre Unix et Windows est-elle connue ?
Comment peut-on classer par ordre croissant la 1ere colonne sans devoir toucher à la requête SQL ? Faut-il créer un autre index ?

Merci d'avance
fredviry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 14h04   #2
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
La seule et unique façon d'obtenir un tri dans un ordre SQL est de le préciser dans la clause order by. Dans le cas contraire le fait que le résultat soit trié à l'affichage résulte souvent du hazard.

En complément : Avant la 10g, group by entrainait un tri, depuis la 10g Oracle fait du "hash group by" et ne trie donc plus sur les colonnes de regroupement.
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 31/03/2011, 14h25   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 : 3 311
Points : 5 808
Points : 5 808
Regardez les paramètres NLS_SORT, NLS_COMP sur les deux bases.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/03/2011, 14h28   #4
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
Citation:
Envoyé par mnitu Voir le message
Regardez les paramètres NLS_SORT, NLS_COMP sur les deux bases.
Il n'y a qu'une base, c'est le client qui change ...
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 15h37   #5
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 : 3 311
Points : 5 808
Points : 5 808
Citation:
Envoyé par ojo77 Voir le message
Il n'y a qu'une base, c'est le client qui change ...
Merci, j'avais lu un peu à travers mais, cela ne change rien. Regardez les paramètres en question dans la vue NLS_SESSION_PARAMETERS pour les deux sessions.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 23h47   #6
Membre Expert
 
Avatar de pachot
 
Homme Franck Pachot
DBA Oracle
Inscription : novembre 2007
Messages : 703
Détails du profil
Informations personnelles :
Nom : Homme Franck Pachot
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : DBA Oracle
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2007
Messages : 703
Points : 1 630
Points : 1 630
Bonjour,

En fait, aucun des 2 résultats n'est trié sur IOLOTN puisque l'order by est sur IOITM ,IOMCU ,IOMMEJ .
C'est un hazard. si ca te semble trié: il se trouve que les IOLOTN sont arrivés physiquement dans le bon ordre. Donc leur rowid se sont trouvés dans le bon ordre et la lecture par index, avec certains paramètres NLS, n'est pas suivie d'un tri et ça arrive comme ça. Avec d'autres paramètres, il y a un tri ensuite sur IOITM ,IOMCU ,IOMMEJ mais toujours pas sur IOLOTN.

Seules solutions: changer la requête ou retrier sur le client.

Cordialement,
Franck,
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
pachot est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/04/2011, 09h19   #7
Invité de passage
 
Inscription : janvier 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 4
Points : 0
Points : 0
Bonjour,

Merci pour vos réponses.
Je ne peux pas toucher aux requêtes (il s'agit d'un traitement JDEdwards). Vous me proposez de trier sur le client. Comment dois-je m'y prendre ? Y-a-t-il un paramètre spécifique au client ?

J'ai lancé à de nombreuses reprises et en même temps cette requête sur client Unix et Windows. A chaque fois, la colonne IOLOTN est triée avec le client Windows et cette même colonne est dans le désordre avec le client Unix. C'est vraiment frustrant.

Merci

Frédéric
fredviry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 09h46   #8
Invité de passage
 
Inscription : janvier 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 4
Points : 0
Points : 0
Sur le client Unix, le paramètre NLS_SORT est positionné à BINARY.
Sur le client Windows, le paramètre NLS_SORT est positionné à FRENCH.

Je modifie le paramètre NLS_SORT sur le client Unix.

Code :
ALTER session SET NLS_SORT='FRENCH';
Je lance ensuite la requête SQL. Cette fois-ci, la colonne IOLOTN est triée.
Génial ! Je souhaite conserver ce paramètre sur le client Unix. A votre avis, quel est l'impact de la modification de ce paramètre ?

Merci

Frédéric
fredviry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 11h01   #9
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 : 3 311
Points : 5 808
Points : 5 808
Linguistic Sort Parameters
Mais vous devez comprendre que tant que la requête n'utilise pas d'Order by sur la colonne IOLOTN votre tri n'est pas fiable.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h53.


 
 
 
 
Partenaires

Hébergement Web