Isso pode fazer o que você está procurando:
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;
-
A expressãowhere to_date(Date, "YYYY-MM-DD")==%I',_t);
está para trás de várias maneiras.
- Aspas simples para valores :
'YYYY-MM-DD'
. - O operador é
=
, não==
. - Parece que você realmente quer
t.Date = to_date(_t, 'YYYY-MM-DD')
- E enquanto
_t
está no formato ISO padrão 'AAAA-MM-DD', em vez disso, basta converter:t.Date = _t::date
.
- Aspas simples para valores :
-
Os nomes das colunas de saída são visíveis dentro do corpo da função. Coluna de qualificação de tabela com o mesmo nome. Melhor ainda, evite conflitos de nomes como esse para começar! Ver:
-
Não há necessidade de SQL dinâmico comEXECUTE
. Passar um valor de dados funciona apenas com SQL simples.
- Não há necessidade de plpgsql. A consulta simples não requer nenhuma funcionalidade processual.
LANGUAGE sql
faz o trabalho - se você precisar de uma função, o SQL simples parece bom para o trabalho.
A parte:não use nomes de tipo básicos como "data" como identificador. Atenha-se aos identificadores legais, em minúsculas. Relacionado: