Questo potrebbe fare quello che stai cercando:
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'espressione
where to_date(Date, "YYYY-MM-DD")==%I',_t);
è indietro in diversi modi.- Virgolette singole per valori :
'YYYY-MM-DD'
. - L'operatore è
=
, non==
. - Sembra che tu voglia davvero
t.Date = to_date(_t, 'YYYY-MM-DD')
- E mentre
_t
è in formato ISO standard 'AAAA-MM-GG', piuttosto semplicemente lanciato:t.Date = _t::date
.
- Virgolette singole per valori :
-
I nomi delle colonne di output sono visibili all'interno del corpo della funzione. Colonna di qualificazione tabella con lo stesso nome. Meglio ancora, evita di nominare conflitti come quello per cominciare! Vedi:
-
Non c'è bisogno di SQL dinamico con
EXECUTE
. Il passaggio di un valore di dati funziona solo con un semplice SQL. - Non c'è bisogno di plpgsql. La query semplice non richiede alcuna funzionalità procedurale.
LANGUAGE sql
fa il lavoro - se hai bisogno di una funzione, un semplice SQL sembrerebbe perfetto per il lavoro.
A parte:non utilizzare nomi di tipo di base come "data" come identificatore. Attenersi a identificatori legali, minuscoli. Correlati: