Cela pourrait faire ce que vous cherchez :
CREATE OR REPLACE FUNCTION foo(_t text)
RETURNS TABLE (Stage_ID bigint, Date varchar) AS
$func$
SELECT t.Stage_ID, t.Date
FROM tbl t
WHERE t.Date = _t::date;
$func$ LANGUAGE sql;
-
L'expression
where to_date(Date, "YYYY-MM-DD")==%I',_t);
est en arrière de plusieurs façons.- Apostrophes pour les valeurs :
'YYYY-MM-DD'
. - L'opérateur est
=
, pas==
. - On dirait que vous voulez vraiment
t.Date = to_date(_t, 'YYYY-MM-DD')
- Et pendant que
_t
est au format ISO standard 'YYYY-MM-DD', plutôt simplement moulé à la place :t.Date = _t::date
.
- Apostrophes pour les valeurs :
-
Les noms des colonnes de sortie sont visibles dans le corps de la fonction. Colonne qualifiée de table du même nom. Mieux encore, évitez les conflits de noms comme ça pour commencer ! Voir :
-
Pas besoin de SQL dynamique avec
EXECUTE
. La transmission d'une valeur de données fonctionne parfaitement avec du SQL ordinaire. - Pas besoin de plpgsql. La requête simple ne nécessite aucune fonctionnalité procédurale.
LANGUAGE sql
fait le travail - si vous avez besoin d'une fonction, du SQL simple semblerait tout à fait approprié.
À part :n'utilisez pas de noms de type de base comme "date" comme identifiant. Tenez-vous en aux identificateurs légaux en minuscules. Connexe :