PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgresql tentando usar o formato de execução em uma função, mas obtendo um erro de coluna não encontrada ao fornecer o formato de string no coalesce


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ão where 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 .

  • 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 com EXECUTE . 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: