Recherche par mots clés avec ORACLE

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. 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
    1. Ca sent le M2GSB STYLE PAR ICI :):):):):):):):):):):):):):)
      0
      1. 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. 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
        2. @CinamonDé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
        3. @Droopy_Oui la requête fonctionne, c'est dans la procédure qu'il y a un pb !
          0