Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
je postule ma question et je souhaiterai si quelqu'un peut m'aider,
mon objectif est de lancer une recherche par mot clé sur toutes les tables ainsi leurs champs issus de la base, si un ou pls résultats trouvés il affiche ses enregistrements.
ma fonction recherche n'affiche aucun bug mais par conséquent le résultat est toujours nul.
j'ai pas compris où est le problème
j'exécute ma fonction par la requete exemple je cherche dans toutes tables et dans tous les champs issus un 'service' malgré que dans la base type j'ai déjà instauré ces mots clé correctement !
je serai à votre écoute pour éclaircir la bonne méthode.
select * from rech2('service') as tableau(tab1 int , tab2 varchar) ;
-----------------------------------
voici mon code en PL/PgSQL
-----------------------------------
CREATE OR REPLACE FUNCTION rech2(mot character varying)
RETURNS SETOF record AS
$BODY$
DECLARE
querysrch record;
req record;
i int ;
BEGIN
FOR querysrch IN SELECT table_name, column_name FROM information_schema.columns
WHERE table_schema = 'public' and data_type ilike '%character%'
LOOP
FOR req IN EXECUTE 'SELECT '|| querysrch.column_name ||' FROM '|| querysrch.table_name||' WHERE '|| querysrch.column_name ||' = '||'''|| mot || '''||' ;'
LOOP
;
RETURN NEXT Req;
END LOOP;
END LOOP;
RETURN;
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION rech2(character varying) OWNER TO postgres;
---------------------------------
Cordialement
Hatem
Dernière modification par Hatem (27/09/2010 11:59:10)
Hors ligne
Bonjour,
Pour commencer, vous n'êtes pas obligé de travailler comme vous le faites, colonne par colonne :
Essayez select * from ma_table WHERE ma_table::text ~ 'ma_chaine_a_rechercher'
Cela permet de retourner tous les enregistrements de 'ma_table' contenant 'ma_chaine_a_rechercher'
Marc.
Hors ligne
Bonjour Mr Marc,
sincèrement, je vous remercie de m'avoir aidé.
Bon travail
je vais reformuler ma fonction
Cordialement
Hatem
Hors ligne
Bonjour,
j'aimerai bien savoir si la reponse de Marc Cousin marche chez vous car ça ne marche pas chez moi.j'ai postgresql 8.1
voici l'erreur renvoyé:
ERROR: syntax error at or near ":"
LINE 1: select * from recherche_mot WHERE recherche_mot:text ~ 'BARK...
^
To use type conversion operator (::) turn off the 'Allow using of parameters in query text' option on Tools tab of Environment Options dialog or double colon symbols.
Hors ligne
Il faut deux : consécutifs, pas un seul. C'est un opérateur de cast (conversion), qui demande à transformer tout l'enregistrement en une chaîne de caractères unique.
Marc.
Hors ligne
Bonjour,
je rebondi sur ce billet, pour poser une question complementaire.
je souhaite rechercher sur 2 tables 'jointé'
du style :
select * from ma_table inner join ma_2eme_table
on ma_table.id_ext = ma_2eme_table.id
WHERE
ma_table inner join ma_2eme_table
on ma_table.id_ext = ma_2eme_table.id ::text ~ 'ma_chaine_a_rechercher'
cela ne marche pas
merci pour vos lumieres
Hors ligne
Logique, la syntaxe n'est pas respectée. Ceci est au moins valide au niveau de la syntaxe :
select * from ma_table inner join ma_2eme_table
on ma_table.id_ext = ma_2eme_table.id
WHERE
ma_table.id_ext ~ 'ma_chaine_a_rechercher'
Pas sûr par contre que ça correspond à ce que vous voulez faire.
Guillaume.
Hors ligne
Non, je pense que ce qui est attendu c'est plutôt :
select * from (select * from ma_table inner join ma_2eme_table
on ma_table.id_ext = ma_2eme_table.id ) as tmp
WHERE
tmp::text ~ 'ma_chaine_a_rechercher'
Marc.
Hors ligne
Pages : 1