Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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.
Julien.
https://rjuju.github.io/
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 ).
Julien.
https://rjuju.github.io/
Hors ligne