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 :

[10gR2] Recherche de chaines et formes flechies


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut [10gR2] Recherche de chaines et formes flechies
    Bonjour,

    J'ai besoin de plusieurs renseignements et j'aimerais avoir votre aide.

    Je possède une table contenant un champ valeur contenant lui-même, pour chaque entrée, une petite phrase.

    Pour trouver les phrases contenant un certain mot (le mot 'nom' ici), j'utilisais la requete :
    SELECT * FROM matable WHERE phrase LIKE '%nom%'

    Le problème, c'est que cette requete peut me renvoyer egalement les phrases contenant le mot 'prénom', ce qui ne correspond pas à ma recherche. J'ai pensé à écrire '% nom %' en entourant le mot par des espaces mais cela m'enlève le cas où il a des apostrophes ou encore des traits d'union.

    Bref, voyez-vous une solution pour résoudre ce problème ?

    Sinon, je désirerais egalement faire une recherche avec les formes fléchies, c'est à dire rechercher egalment les pluriels et les feminins. Par exemple, si je cherche 'nom', je veux chercher aussi 'noms'. Si je cherche 'actuel', chercher aussi 'actuelle','actuels' et 'actuelles'. Par contre, si je cherche 'actuelle', je cherche seulement dans 'actuelle' et 'actuelles'.

    Oracle peut-il gérer cela à l'exemple d'autres systèmes, comme par exemple SearchServer ?

    Merci d'avance pour votre précieuse aide !

  2. #2
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    La nouveauté dans 10g c'est les expressions regulieres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM Table
    WHERE REGEXP_LIKE(phrase, 'nom');

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par bouyao
    La nouveauté dans 10g c'est les expressions regulieres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM Table
    WHERE REGEXP_LIKE(phrase, 'nom');
    Certes c'est une nouveauté mais est-ce vraiment cécessaire de l'utiliser dans mon cas ? Je ne vois pas personnellement, ce que cette fonctione peut m'apporter dans mon problème...

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Je ne vois guère de solution à votre problème, sinon indexer votre colonne avec Oracle Text.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    j'ai crée une table dvp et j'ai inserer des mots :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> select ch from dvp;
     
    CH
    ----------
    étéolà
     
    prénom
    nom
    ml-nom
    mnom.test
     
    8 ligne(s) sÚlectionnÚe(s).

    aprés


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> select ch from dvp WHERE REGEXP_LIKE(ch, 'nom');
     
    CH
    ----------
    prénom
    nom
    ml-nom
    mnom.test
    si je veut que avant le mot nom soit : espace ou trait par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select ch from dvp WHERE REGEXP_LIKE(ch, '[- ]nom');
     
    CH
    ----------
    ml-nom
    et on peut faire encore plus il suffit de lire la doc.

  6. #6
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    c'est ca ce que tu veut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    SQL> select ch from dvp WHERE REGEXP_LIKE(ch, '^nom');
     
    CH
    ----------
    nom
    noms
     
    SQL> select ch from dvp WHERE REGEXP_LIKE(ch, '^actuel');
     
    CH
    ----------
    actuel
    actuelle
    actuels
    actuelles
     
    SQL> select ch from dvp WHERE REGEXP_LIKE(ch, '^actuelle');
     
    CH
    ----------
    actuelle
    actuelles
     
    SQL>

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par bouyao
    c'est ca ce que tu veut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    SQL> select ch from dvp WHERE REGEXP_LIKE(ch, '^nom');
     
    CH
    ----------
    nom
    noms
     
    SQL> select ch from dvp WHERE REGEXP_LIKE(ch, '^actuel');
     
    CH
    ----------
    actuel
    actuelle
    actuels
    actuelles
     
    SQL> select ch from dvp WHERE REGEXP_LIKE(ch, '^actuelle');
     
    CH
    ----------
    actuelle
    actuelles
     
    SQL>
    Effectivement mais ca me renvoit les résultats escompté mais il y a pas mal de bruit qui est généré.
    Par exemple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ch from dvp WHERE REGEXP_LIKE(ch, '^nom');
    va me renvoyer aussi les mots du genre 'nominatif','nommer','nombre'...

  8. #8
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Dans ton exemple concernant le mot nom, tu peut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> select ch from dvp WHERE REGEXP_LIKE(ch, '^nom($|s)');
     
    CH
    ----------
    nom
    noms
    ^ : début de la ligne
    $ : fin de la ligne
    | : choix entre $ ou s

    Par contre SQLPLUS ne connait pas la grammaire française et il ne va pas te trouver les pluriels.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Re Bonjour.

    Oracle Text me parrait très interessant.
    A priori, il gère bien tout ce qui touche aux pluriels non ?
    Connaissez vous un bon tutoriel permettant d'apprendre à utiliser ces foncitonnalités ? J'ai commencé à regardé mais je cherche surtout à trouver comment mettre en place le support du Français.

    Merci d'avance

Discussions similaires

  1. [vbexcel]Rechercher une chaine dans une autre chaine...
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/12/2005, 13h49
  2. Réponses: 2
    Dernier message: 09/12/2005, 12h23
  3. Comment rechercher une chaine dans plusieurs tables ?
    Par tsing dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/11/2005, 18h04
  4. Recherche de chaine (TFindDialog)
    Par PoOky dans le forum Composants VCL
    Réponses: 10
    Dernier message: 30/08/2005, 07h59
  5. Recherche de chaine ...
    Par Metal3d dans le forum C
    Réponses: 8
    Dernier message: 27/07/2002, 01h20

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