Recherche par mots clés avec ORACLE
Cinamon
-
Ner0lph Messages postés 91 Statut Membre -
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)
);
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
-
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 ???)-
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 ?
-
-
-
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.