Vous n'êtes pas identifié(e).

#1 03/01/2019 00:55:00

alamut
Membre

Récupérer le résultat d'une requête dans une fonction

Bonjour,

J'exécute une fonction qui a en paramètres le nom de colonne à afficher + le nom de colonne sur laquelle la recherche est effectuée + la valeur que l'on recherche


CREATE FUNCTION maFonction(colonne_1 varchar, colonne_2 varchar, mavaleur varchar) returns varchar as $$
    select distinct  $1 from matable where $2 = $3;
$$ language 'sql';

La valeur est toujours <NULL> . j'ai essayé avec select INTO, RETURN...etc mais je n'ai toujours rien

C'est ma première expérience avec PSQL et je n'arrive pas à trouver ou est le souci?
Y'aurait-il un moyen d'afficher la requête exécuté par la fonction? 

Merci d'avance

Hors ligne

#2 03/01/2019 13:22:38

rjuju
Administrateur

Re : Récupérer le résultat d'une requête dans une fonction

Vous ne pouvez pas utiliser de paramètre pour les colonnes ou tables.  Vous devez construire une requête dynamique.  Voyez avec format() (https://www.postgresql.org/docs/current/functions-string.html ) par exemple.

Hors ligne

#3 04/01/2019 03:48:36

alamut
Membre

Re : Récupérer le résultat d'une requête dans une fonction

Merci, cela fonctionne maintenant


req := 'SELECT distinct ' || colonne_1 ||' FROM matable WHERE "' || colonne_2 || '" = \'' || mavaleur || '\'';
EXECUTE req INTO val_retour;
RETURN;

Merci encore

Hors ligne

#4 04/01/2019 10:19:37

rjuju
Administrateur

Re : Récupérer le résultat d'une requête dans une fonction

Si vous n'utilisez pas la fonction format() ou de paramètres, utilisez au moins la fonction quote_ident() pour que votre fonction n'explose pas en vol le jour ou des noms de colonne nécessitant des guillemets doubles seront utilisés, et quote_literal() pour éviter des injections SQL (cf https://www.postgresql.org/docs/current … CUTING-DYN ).

Hors ligne

Pied de page des forums