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

Oracle Discussion :

[Oracle 10] Bizzareté requête avec order by ??


Sujet :

Oracle

  1. #1
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut [Oracle 10] Bizzareté requête avec order by ??
    Bonjour

    en commencant le "portage" de nos appli pour compatibilité oracle, je me suis appercu d'une choses bizzare (pour moi)

    La table TEST :
    NUMERO Char 10
    NUMERO_LIGNE Number 3,0
    avec PK sur les deux champs

    Les données :

    • -1, 1
      -2, 1
      -3, 1
      -4, 1
      -7, 1
      456, 1
      511, 1
      600, 1


    et si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from test
    where numero<='511'
    order by numero
    j'obtient :
    -1, 1
    -2, 1
    -3, 1
    -4, 1
    456, 1
    511, 1
    -7, 1[/list]

  2. #2
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Points : 110
    Points
    110
    Par défaut Re: [Oracle 10] Bizzareté requête avec order by ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from test
    where numero<='511'
    order by numero

    La conversion implicite du CHAR en NUMBER ne fonctionne pas dans ce cas.
    essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from test
    where to_number(numero)<=511
    order by numero

  3. #3
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut Re: [Oracle 10] Bizzareté requête avec order by ??
    Citation Envoyé par thomasjcj
    La conversion implicite du CHAR en NUMBER ne fonctionne pas dans ce cas.
    essaie:
    Ben justement je ne veux pas qu'il fasse la conversion.
    Nos client on le choix entre compteur automatique et saisie manuelle, donc il peut y avoir des lettres.
    De plus lors des "bascules", les anciennes commandes (de l'ancien système) sont entrées généralement avec un '-' devant, pour que justement elle se retrouve en fin de liste (ORDER BY .. DESC)

    Ce qui est bizarre c'est que le serveur ne tient pas compte du caractère '-' pour faire sont tri ascii

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Que donne la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from test 
    where numero<='511' 
    order by nlssort (numero, 'NLS_SORT=BINARY');
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  5. #5
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut
    Citation Envoyé par plaineR
    Que donne la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from test 
    where numero<='511' 
    order by nlssort (numero, 'NLS_SORT=BINARY');
    Cela fonctionne...mais pourquoi c'est pas la valeur par defaut pour un tri ascii
    ?.
    C'est tout de même logique de trier '-1','-3','2','A' dans l'ordre non ?

    Franchement je tombre de Charybde & Scylla avec Oracle. Dans l'ERP on a 141 programmes. Que l'on à rendu compatible Paradox/MSSQL sans problème.... pour Oracle ce sera plus compilqué.

    Mais bon au moins cela me donne des pistes, Merci

  6. #6
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Je pense que tu peux régler ce paramètre directement dans la session de l'utilisateur
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter session set nls_sort = BINARY
    Cependant, ce paramètre de session est valable pour toute tes requêtes de la session

  7. #7
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 97
    Points : 110
    Points
    110
    Par défaut
    N'oublie pas que tu tries une chaine de caractere et pas un nombre. C'est le parametre NLS_SORT qui defini les patametres du tri (fonction du Langage).
    Dans la plupart des cas Oracle ignore les caracteres '-' et '+' dans les tris de chaine de caractere, ce qui est loin d'etre illogique.
    Ca permet par exemple de traiter le mot "apres-ski" comme "apresski"
    La doc Oracle est bien fournie à ce sujet:
    http://download-west.oracle.com/docs...h4.htm#1007966

  8. #8
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut
    Citation Envoyé par thomasjcj
    N'oublie pas que tu tries une chaine de caractere et pas un nombre. C'est le parametre NLS_SORT qui defini les patametres du tri (fonction du Langage).
    Dans la plupart des cas Oracle ignore les caracteres '-' et '+' dans les tris de chaine de caractere, ce qui est loin d'etre illogique.
    Ca permet par exemple de traiter le mot "apres-ski" comme "apresski"
    La doc Oracle est bien fournie à ce sujet:
    http://download-west.oracle.com/docs...h4.htm#1007966
    C'est sur dans le cas de l'"apres-ski", cela peut se comprendre. Mais faire cela par défaut....

    En tous cas marci à tous le monde

  9. #9
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut
    Citation Envoyé par sygale
    Je pense que tu peux régler ce paramètre directement dans la session de l'utilisateur
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter session set nls_sort = BINARY
    Cependant, ce paramètre de session est valable pour toute tes requêtes de la session
    Par session en entend ....
    Chaque session spid du serveur (une par requete ?), ou alors la session utilisateur connecté au serveur sql ?

  10. #10
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par Eric.H
    C'est sur dans le cas de l'"apres-ski", cela peut se comprendre. Mais faire cela par défaut....
    Ce n'est pas forcément fait par défaut cela dépend de des paramètres NLS de ta base définis à l'installation.
    Pour plus d'infos sur ces paramètres tu peux faire une requête sur V$NLS_PARAMETERS.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  11. #11
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut
    Citation Envoyé par plaineR
    Citation Envoyé par Eric.H
    C'est sur dans le cas de l'"apres-ski", cela peut se comprendre. Mais faire cela par défaut....
    Ce n'est pas forcément fait par défaut cela dépend de des paramètres NLS de ta base définis à l'installation.
    Pour plus d'infos sur ces paramètres tu peux faire une requête sur V$NLS_PARAMETERS.
    Est ce que l'on peut APRES l'installation changer le NLS_SORT ?

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    oui dans le init.ora

  13. #13
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut
    Merci à tous pour les pistes

    Je clos le thread

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

Discussions similaires

  1. [MySQL] présenter une requête avec ORDER BY id DESC LIMIT
    Par kogoi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/11/2011, 18h18
  2. Réponses: 5
    Dernier message: 10/02/2010, 14h11
  3. Probleme sur requête avec order by multiple
    Par dembroski dans le forum Requêtes
    Réponses: 25
    Dernier message: 28/01/2010, 15h47
  4. Requête avec ORDER BY et DESC
    Par Daddy91 dans le forum Requêtes
    Réponses: 9
    Dernier message: 31/03/2009, 11h20
  5. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02

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