Recherche par mots clés avec ORACLE

Cinamon -  
Ner0lph Messages postés 91 Statut Membre -
Bonjour,
J'ai à priori un soucis de synthaxe avec ma procédure PL/SQL de recherche par mots clés dans ma table LIVRE. Ma procédure est de la forme:

create or replace procedure rechercher(mot1 VARCHAR) IS
monTitre VARCHAR(50);
BEGIN
SELECT titre INTO monTitre
FROM livre
WHERE UPPER(monTitre) LIKE '%mot1%';

EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE('Aucun livre ne correspond à votre
recherche');
WHEN others THEN
NULL;
END rechercher;
/

LE problème, c'est que ma requete ne trouve jamais aucun livre !! Même si en paramêtre je rentre un mot qui figure dans le titre de mon livre ! Y a t'il un pb dans ma façon d'écrire ma requete ???

Merci pour votre aide !!!

Si ça peut être utile ma table livre est de la forme :
create table livre(
id_livre number not null primary key,
titre varchar(50)
);
Configuration: Linux
Firefox 3.0.3

3 réponses

  1. Droopy_ Messages postés 252 Statut Membre 25
     
    Est-ce qu'en faisant la requête manuellement, ça marche ?

    SELECT titre
    FROM livre
    WHERE UPPER(monTitre) LIKE '%mot1%';

    en changeant nomTitre et mot1.

    Ce serait pas un problème de majuscule/minuscule, puisque tu changes montitre en majuscule
    et pas mot1 (il est peut-être déjà en majuscule ???)
    0
    1. Cinamon
       
      Effectivement il y avait ce pb de majuscule/minuscule, merci bcq pr la remarque, maitenant ma requete fonctionne comme cela:

      SELECT titre
      FROM livre
      WHERE UPPER(titre) LIKE UPPER('%fl%');

      MAIS le probleme (à savoir pas de résultats au final) persiste qd j'intègre le code à la procédure de la façon suivante :

      create or replace procedure rechercher(mot1 VARCHAR) IS
      monTitre VARCHAR(50);
      BEGIN
      SELECT titre INTO monTitre
      FROM livre
      WHERE UPPER(monTtitre) LIKE UPPER('%mot1%');

      EXCEPTION
      WHEN no_data_found THEN
      DBMS_OUTPUT.PUT_LINE('Aucun livre ne correspond à votre recherche');
      WHEN others THEN
      NULL;
      END rechercher;
      /

      Je ne suis pas sûr de la façon dont je récupère 'mot1' et monTitre, est-ce bien correct ?
      0
      1. Droopy_ Messages postés 252 Statut Membre 25 > Cinamon
         
        Désolé, je n'irai pas plus loin en ce qui concerne PL/SQL, je l'ai jamais utilisé.
        Tu as testé ta requête en dehors de PL/SQL ? Directement en SQL sur ta base ?
        Si elle marche, j'ai plus de solution...
        0
      2. Cinamon > Droopy_ Messages postés 252 Statut Membre
         
        Oui la requête fonctionne, c'est dans la procédure qu'il y a un pb !
        0
  2. kikoooooooo
     
    Ca sent le M2GSB STYLE PAR ICI :):):):):):):):):):):):):):)
    0
  3. Ner0lph Messages postés 91 Statut Membre 200
     

    Hello,

    Déterrage, et réponse d'un pro, au bout de 17 ans… ^_^'

    Le problème vient de ton LIKE : il faut mettre « LIKE '%' || mot1 || '%' » et non « LIKE '%mot1%' ». En effet, il faut concaténer le nom du paramètre pour former la chaine de recherche, sinon c'est comme si tu cherchais la chaine 'mot1'.

    En espérant que ça puisse aider des gens.

    Bisous.

    0