Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 27/01/2017 15:38:10
- Michel Depiesse
- Membre
Nom de fonction comme paramètre d'une fonction
Bonjour,
Dans le but de comparer plusieurs algorithmes de pg_similarity, j'ai besoin d'envoyer comme paramètre le nom de la fonction
J'aimerais mettre le sql suivant dans une fonction où jaro pourrait être remplacé par lev ou cosine, etc...
insert into
wrk_simil_compare_methods
select
user_name
,'Company'
,"ContactID"
,jaro("Company", company2cmp)
,'jaro'
from
"tblContacts"
where
jaro("Company", company2cmp) > 0.75;
Est-ce possible en PL/pgSQL ?
Merci pour votre attention,
Mchl
Hors ligne
#2 27/01/2017 15:47:46
- rjuju
- Administrateur
Re : Nom de fonction comme paramètre d'une fonction
Oui, regardez du côté d'EXECUTE (http://docs.postgresql.fr/9.6/plpgsql-statements.html §41.5.4).
Julien.
https://rjuju.github.io/
Hors ligne
#3 29/01/2017 14:59:37
- Michel Depiesse
- Membre
Re : Nom de fonction comme paramètre d'une fonction
Merci ! Ca marche
drop table if exists wrk_simil_compare_methods;
create table wrk_simil_compare_methods(
value1 varchar
,value2 varchar
,method varchar
,simil_value double precision
);
create or replace function generic_simil(
field_name varchar
,value2cmp varchar
,typeofvalue varchar
,algorithm varchar
,threshold decimal
) returns void as $$
begin
execute
'insert into wrk_simil_compare_methods select '
|| '''' || field_name || ''','
|| '''' || value2cmp || ''','
|| '''' || algorithm || ''','
|| algorithm || '('
|| '"' || field_name || '",'
|| '''' || value2cmp || '''' || ')'
|| ' from "tblContacts" where '
|| algorithm || '('
|| '"' || field_name || '",'
|| '''' || value2cmp || '''' || ')'
|| ' > ' || threshold;
end; $$ language 'plpgsql';
select generic_simil('Company', 'Dalibo', 'varchar', 'lev', 0.40);
select generic_simil('Company', 'Diolabo', 'varchar', 'lev', 0.40);
select generic_simil('Company', 'Libido', 'varchar', 'cosine', 0.40);
select generic_simil('Company', 'Oracle', 'varchar', 'cosine', 0.40);
select * from wrk_simil_compare_methods;
encore une petite question : le value2cmp pourrait être un nombre. Dans ce cas, il ne faudrait pas le mettre entre '. Comment faire que le script détecte le type de value2cmp et décide de mettre les ' ou non ?
Merci.
Hors ligne
#4 30/01/2017 11:18:11
- rjuju
- Administrateur
Re : Nom de fonction comme paramètre d'une fonction
Vous pouvez utiliser une variable pour construire votre requête et gérer ça avec un simple IF ... ELSE, ou forcer un cast dans la chaîne construite :
SELECT '1'::integer;
SELECT 'toto'::varchar;
Sinon, je vous conseille d'utiliser la fonction quote_literal() pour éviter toute surprise avec le contenu entrée.
Julien.
https://rjuju.github.io/
Hors ligne
#5 31/01/2017 15:54:13
- Michel Depiesse
- Membre
Re : Nom de fonction comme paramètre d'une fonction
Merci
Hors ligne
Pages : 1