Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 29/11/2011, 11h41   #1
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 393
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 393
Points : 439
Points : 439
Par défaut Oracle : requête. problème selection d'enregistrement where ID <= 'chaine'. incohérence

Salut à tous,
je rencontre actuellement un problème :

Sous oracle 11g,
soit la table ma_table triée par id (varchar2) et numérotée dans la colonne nb.

Code :
1
2
3
4
5
6
7
8
 
DESCRIBE ma_table
Nom                            NULL     Type                                                                                                                                                                                          
------------------------------ -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
ID                                  VARCHAR2(4000)                                                                                                                                                                                
NB                                      NUMBER                                                                                                                                                                                        
 
2 rows selected
Le premier ID a pour NB 1, le second 2, le troisième 3, le nième n.
Si je sélectionne l'id du 9999 enregistrement :
Code :
1
2
3
4
5
6
7
 
SELECT ID FROM ma_table WHERE nb ='9999'
--retourne BE12345
 
SELECT count(*) 
FROM ma_table
WHERE ID <= 'BE12345'
J'obtiens 11369 au lieu de 9999.
Je précise qu'il n y a pas de doublon au niveau des ID (ni nb).

Quelqu'un peut il m'expliquer pourquoi cela ne fonctionne pas ?
Qu'est ce qui se passe au niveau de la comparaison alphabétique des varchar pur l'ID ?

merci d'avance,
ben
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h48   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Une table n'est JAMAIS triée (j'insiste un peu sur la mise en forme, car c'est important).

Il faut visualiser une table comme étant un sac de billes.

Qu'est-ce que la cinquième bille d'un sac de billes => ça peut être n'importe laquelle.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/11/2011, 12h18   #3
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Citation:
Envoyé par ben.IT Voir le message
Qu'est ce qui se passe au niveau de la comparaison alphabétique des varchar pur l'ID ?
Avec un VARCHAR2 '10' < '2'
Pour info pas besoin de quote autour d'un nombre :
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 13h46   #4
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Pour moi, le problème est qu'on n'a pas de règle sur l'ID : ID <= 'BE12345' ne veut pas dire grand chose... à part un test de l'ordre alphabétique (en tous cas, certainement pas le nombre d'ID insérés avant celui-ci !)

Plutôt :
Code :
1
2
3
4
 
SELECT count(*) 
FROM ma_table
WHERE nb <= 9999
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h23.


 
 
 
 
Partenaires

Hébergement Web