Może to zrobić to, czego szukasz:
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;
-
Wyrażenie
where to_date(Date, "YYYY-MM-DD")==%I',_t);
jest wstecz na wiele sposobów.- Pojedyncze cudzysłowy dla wartości :
'YYYY-MM-DD'
. - Operatorem jest
=
, a nie==
. - Wygląda na to, że naprawdę chcesz
t.Date = to_date(_t, 'YYYY-MM-DD')
- A gdy
_t
jest w standardowej formie ISO 'RRRR-MM-DD', zamiast tego po prostu rzutuje:t.Date = _t::date
.
- Pojedyncze cudzysłowy dla wartości :
-
Nazwy kolumn wyjściowych są widoczne w treści funkcji. Kolumna kwalifikacyjna tabeli o tej samej nazwie. Jeszcze lepiej, na początek unikaj takich konfliktów nazw! Zobacz:
-
Nie ma potrzeby dynamicznego SQL z
EXECUTE
. Przekazywanie wartości danych działa dobrze ze zwykłym SQL. - Nie ma potrzeby korzystania z plpgsql. Proste zapytanie nie wymaga żadnej funkcji proceduralnej.
LANGUAGE sql
wykonuje zadanie - jeśli w ogóle potrzebujesz funkcji, zwykły SQL wydaje się odpowiedni do tego zadania.
Na marginesie:nie używaj podstawowych nazw typów, takich jak „data”, jako identyfikatora. Trzymaj się legalnych identyfikatorów pisanych małymi literami. Powiązane: