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 :

Resultat différent entre client Unix et Windows


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    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.

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    Regardez les paramètres NLS_SORT, NLS_COMP sur les deux bases.

  4. #4
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    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 ...

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    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.

  6. #6
    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,

    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,

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut
    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

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    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.

Discussions similaires

  1. [AC-2007] Requete donnant un resultat différent entre Access et Excel
    Par comme de bien entendu dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/06/2013, 10h44
  2. [XL-2010] Resultat différente entre requette Access et Excel
    Par comme de bien entendu dans le forum Excel
    Réponses: 0
    Dernier message: 29/05/2013, 16h52
  3. Réponses: 57
    Dernier message: 13/08/2007, 13h51
  4. Portage d'un client Unix sous windows !
    Par vonemya dans le forum Windows
    Réponses: 1
    Dernier message: 08/07/2007, 13h17
  5. Affichage différent entre Windows XP et 2000
    Par Ben_Le_Cool dans le forum Langage
    Réponses: 9
    Dernier message: 29/07/2005, 20h52

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