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 :

[9iR2] Requête sur des libellés ''Äçàè"


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Par défaut [9iR2] Requête sur des libellés ''Äçàè"
    Bonjour

    J'ai besoins d’implémenter une fonction de recherche sur des libellés en JAVA connecté à une base Oracle 9.2

    Le problème est que ces libellés en base sont susceptible de contenir des caractères majuscule comme minuscule accentué ou non et avec des cédilles "éçàÂÎÇ"

    Il y aurait bien la fonction SOUNDEX mais il faudrait pouvoir l'utiliser avec un like '%%'

    Vous auriez une solution à par le translate ?

    - nlssort incompatible
    - CONVERT incompatible


    EDIT : CONVERT FONCTIONNE TRÈS BIEN

    Merci

  2. #2
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Bonjour,


    D'après ce que j'ai trouvé dans la documentation oracle 9i (R2), la fonction TRANSLATE est disponible pour la version d'oracle que vous utilisez.

    http://docs.oracle.com/cd/B10501_01/...htm#SQLRF06145

    ainsi que la fonction REPLACE.

    http://docs.oracle.com/cd/B10501_01/...htm#SQLRF00697

    Oui, on peut se débarasser des accents si et seulement si on part sur le principe que les accents n'ont pas d'impact sur la recherche (en gros les caractères tels qu'ils sont présentés dans la table ASCII)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TRANSLATE(REPLACE('ici vous écrivez donc votre texte', 'Œœ', 'oeoe'),'ÀÂÄÈÉÊËÎÏÔÙÛÜYÇàâäèéêëîïôùûüÿç',
    'AAAEEEEIIOUUUYCaaaeeeeiiouuuyc')
    Attention, il faut avoir configuré au préalable le paramètre NLS_LANGUAGE de votre session oracle, sinon on risque d'avoir des résultats bizzars.


    Cordialement,

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Par défaut
    Merci de votre réponse,

    Le translate fonctionne bien 9.2 quand on ne fait pas appelle à une colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select TRANSLATE(UPPER('%behç%'), 'ÉÈÊËÀÄÂÎÏÔÖÛÜÇ', 'EEEEAAAIIOOUUC') from dual;
    Mais dans ce cas là ça ne passe pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM table
    WHERE TRANSLATE(UPPER(colonne),'ÁÀÂÄÃÇÉÈÊËÍÌÏÎÑÒÓÔÖÕØÚÙÛÜÝŸ', 'AAAAACEEEEIIIINOOOOOOUUUUYY') like TRANSLATE(UPPER('%behç%'), 'ÁÀÂÄÃÇÉÈÊËÍÌÏÎÑÒÓÔÖÕØÚÙÛÜÝŸ', 'AAAAACEEEEIIIINOOOOOOUUUUYY');
    En 10 ça passe sans problème

  4. #4
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Donc vous dites si vous écrivez le nom de la colonne au lieu d'une chaîne de caractère explicite ça ne passe pas sur oracle 9i. Je ne peux pas vérifier car je suis sur 11gR2.

    Dans le lien de la documentation TRANSLATE que je vous ai donné on peut lire:
    ...
    This function does not support CLOB data directly. However, CLOBs can be passed in as arguments through implicit data conversion.
    ...
    Quel est le type de la colonne?

  5. #5
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Quel est exactement le message d'erreur que vous avez sous oracle 9i?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Par défaut
    Désolé j'ai fais une erreur dans le nom de la table... qui existe effectivement sur ma base en version 10 ...

    Le translate fonctionne très bien en 9.2

    Ça aussi ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select UPPER (CONVERT (libelle, 'US7ASCII')) from ma_table;

  7. #7
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Si le problème est donc résolu merci de clôturer le thread en le mettant à Résolu.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Par défaut
    Je vais effectivement le mettre en résolu

    Mais il n'y a aucun moyen d'utiliser le SOUNDEX avec un like ?

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Pourquoi NLSSORT ne fonctionnerait-il pas ?
    Qu'avez-vous comme retour ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Par défaut
    Bonjour

    En retour j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ORA-12702: chaîne de paramètre NLS dans la fonction SQL est erronée.
    12702. 00000 -  "invalid NLS parameter string used in SQL function"
    *Cause:    An unknown parameter name or invalid value is specified in a NLS
               parameter string.
    *Action:
    Sur une 10 aucun souci

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ça signifie que vous avez mal paramétré votre nls_sort dans nlssort.
    Ceci a l'air de fonctionner, à voir sur vos vraies données si la collation est satisfaisante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select sr1.lib, sr2.lib
      from (select 'Çècì ÉsT üN tËst.' as lib from dual) sr1,
           (select 'ceci est un test.' as lib from dual) sr2
     where nlssort(sr2.lib, 'nls_sort=''French_AI''') = nlssort(sr1.lib, 'nls_sort=''French_AI''');
     
    LIB               LIB
    ----------------- -----------------
    Çècì ÉsT üN tËst. ceci est un test.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 212
    Par défaut
    Ta requête ne passe pas, alors que sur la version 10 oui

    Mais effectivement la base n'est pas très bien configuré au niveau des langages, dans NLS_LANGUAGE j'ai american... sur la 10 j'ai french

    Même si :

    In Oracle10g you can append any valid SORT name with _AI or _CI so that it behaves in a accent- or case-insensitive way.

    https://support.oracle.com/epmos/fac...12hcfla4xd_113

    Mais c'est pas grave, le concert fonctionne très bien

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

Discussions similaires

  1. Mysql requête sur des dates
    Par lampre dans le forum Requêtes
    Réponses: 10
    Dernier message: 19/12/2006, 11h50
  2. requête sur des chaînes de caractères
    Par Mlude dans le forum Requêtes
    Réponses: 4
    Dernier message: 16/08/2006, 20h52
  3. [Conception] Requête sur des dates pour stats
    Par vallica dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/05/2006, 10h15
  4. [MySQL] Problème de requête sur des dates
    Par dahu29 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2006, 13h08
  5. requêtes sur des champs date
    Par wiwi dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 03/02/2006, 14h14

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