Esto podría hacer lo que está buscando:
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;
-
La expresión
where to_date(Date, "YYYY-MM-DD")==%I',_t);
está al revés de varias maneras.- Comillas simples para valores :
'YYYY-MM-DD'
. - El operador es
=
, no==
. - Parece que realmente quieres
t.Date = to_date(_t, 'YYYY-MM-DD')
- Y mientras
_t
está en el formato ISO estándar 'YYYY-MM-DD', en lugar de emitir:t.Date = _t::date
.
- Comillas simples para valores :
-
Los nombres de las columnas de salida están visibles dentro del cuerpo de la función. Columna de calificación de tabla del mismo nombre. Mejor aún, ¡evite nombrar conflictos como ese para empezar! Ver:
-
No hay necesidad de SQL dinámico con
EXECUTE
. Pasar un valor de datos funciona perfectamente con SQL simple. - No es necesario plpgsql. La consulta simple no requiere ninguna funcionalidad de procedimiento.
LANGUAGE sql
hace el trabajo:si necesita una función, SQL simple parecería estar bien para el trabajo.
Aparte:no use nombres de tipos básicos como "fecha" como identificador. Cíñete a los identificadores legales en minúsculas. Relacionado: