Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
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 05/10/2007, 12h49   #1
Futur Membre du Club
 
Inscription : mars 2003
Messages : 80
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Sénégal

Informations forums :
Inscription : mars 2003
Messages : 80
Points : 16
Points : 16
Envoyer un message via MSN à ruff15
Par défaut Problème de maj/min dans une requête

Bonjour,
Pourquoi ces deux requêtes sont différentes dans la mesure où l'une me retourne un enregistrement de ma table et l'autre non?
SELECT * FROM ma_table WHERE mon_champ = 'TOTO'
SELECT * FROM ma_table WHERE mon_champ = 'toto'

Merci
__________________
6ril 4 ever
ruff15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2007, 13h18   #2
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
Bonjour.

Cela me semble normal dans la mesure où 'TOTO' et 'toto' sont des constantes texte alpha (literal), donc il n'y a pas de conversion maj/min. Par contre quand il s'agit d'instructions, de commande, de variables, etc... le compilateur, l'interpreteur, etc..., fait la conversion.
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2007, 13h51   #3
Futur Membre du Club
 
Inscription : mars 2003
Messages : 80
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Sénégal

Informations forums :
Inscription : mars 2003
Messages : 80
Points : 16
Points : 16
Envoyer un message via MSN à ruff15
Je suis bien d'accord avec vous. Mais alors pourquoi pour d'autres bases teslles que MySql ou SQL Server il n'y a aucune différence entre les deux requêtes?
__________________
6ril 4 ever
ruff15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2007, 15h14   #4
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
Je ne sais et franchement cela me semble curieux pour une constante ???
Peut être s'agissait-il d'une contante servant à la comparaison ou recherche de chaine en ne tenant pas compte de la casse, auquel cas...

HJ
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2007, 16h54   #5
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
SELECT * FROM ma_table WHERE UPPER(mon_champ) = 'TOTO'
SELECT * FROM ma_table WHERE LOWER(mon_champ) = 'toto'

LOWER & UPPER, ça va marcher mais c'est à éviter car couteux en matière de temps de traitement paraît-il.

Citation:
pourquoi pour d'autres bases teslles que MySql ou SQL Server il n'y a aucune différence
Faut demander à M$ alors...
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 17h44   #6
Futur Membre du Club
 
Inscription : mars 2003
Messages : 80
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Sénégal

Informations forums :
Inscription : mars 2003
Messages : 80
Points : 16
Points : 16
Envoyer un message via MSN à ruff15
Bon je vais détailler, peut-être cela vous éclairera davantage.
J'ai une application développée en J2EE (Websphere, Struts-layout, EJB, ...) qui utilise comme base DB2. J'ai importé depuis une autre base (SQL Server) des tables de paramètres comme par exemple (Pays, Devises, etc...)

Prenons l'exemple de la table Pays(Code, Libellé), nous avons les données suivantes :
FR - France
US - USA
ES - Espagne ...

Au niveau d'un écran de saisie E1, j'ai un champ que j'appelle Pays Origine. Il est sur deux positions donc il ne peut contenir des lettres comme Fr, Us etc...
L'utilisateur peut saisir des majuscules ou des minuscules dans le champ. D'ou mon problème posé car il ya un controle d'intégrité qui est géré par le conteneur EJB donc je ne peux pas accéder à cette requête. Si l'utilisateur saisit 'Fr', le controle d'intégrité va renvoyé une erreur car en base c'est 'FR' qui existe comme clé.
Or sous SQL Server, MySql, il ne fait pas de différence entre la casse.

En conclusion, sous DB2, 'FR', 'fr', 'Fr', 'fR' sont quatres pays différents tandis que sous Sql Server ou autre non
__________________
6ril 4 ever
ruff15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 21h25   #7
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
Salut.

Je n'ai pas une grande pratique de SQL mais AMHA tu devrais regarder du côté de la définition de la contrainte référentielle elle même et de la clé de référence qui assure le lien avec la clé de la table parente. Je ne sais pas si tu peux définir cette clé comme UPPER(CODE_PAYS).

C'est juste une piste à explorer

Cordialement
Hédhili Jaïdane
- - - - - - - - -
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 11h29   #8
Futur Membre du Club
 
Inscription : mars 2003
Messages : 80
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Sénégal

Informations forums :
Inscription : mars 2003
Messages : 80
Points : 16
Points : 16
Envoyer un message via MSN à ruff15
Salut,
Tout d'abord je voudrais vous remercier pour votre disponibilité. Je crois bien qu'il m'est impossible de gérer ça au niveau de la base DB2.
De plus mes requêtes de sélection sont gérées par le conteneur EJB. Donc c'est réalisé en background, je n'ai aucune visibilité là dessus.
Alors à moins d'une lumière venue de l'un de vous, je crois que je vais devoir appliquer un style CSS (text-transform: uppercase; ) sur les champs de mes écrans (bonjour la charge de travail)...

__________________
6ril 4 ever
ruff15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 14h23   #9
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
Pour info mais cela ne résoud pas ton problème: http://www-128.ibm.com/developerwork...402greenstein/
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 21h06   #10
Membre habitué
 
Inscription : septembre 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 123
Points : 127
Points : 127
Pour Mercure,

On doit pouvoir coder SELECT * FROM ma_table WHERE mon_champ = UPPER('ToTo') et le prédicat est (pas testé) indexable.

D'une manière générale, il faut essayer de faire porter la fonction sur la chaïne de caractères. C'était un "tip" sur db2 V7, typiquement sur un cast de type de données mais en V8, ça semble de plus en plus intégrer dans l'optimiseur.

Alex.
alex. 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 06h29.


 
 
 
 
Partenaires

Hébergement Web