PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgresql tenta di utilizzare il formato di esecuzione in una funzione ma ottiene l'errore colonna non trovata quando si fornisce il formato stringa in coalesce

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