Dies könnte das tun, wonach Sie suchen:
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;
-
Der Ausdruck
where to_date(Date, "YYYY-MM-DD")==%I',_t);
ist in mehrfacher Hinsicht rückwärts.- Einfache Anführungszeichen für Werte :
'YYYY-MM-DD'
. - Der Operator ist
=
, nicht==
. - Sieht so aus, als wollten Sie wirklich
t.Date = to_date(_t, 'YYYY-MM-DD')
- Und während
_t
ist in der Standard-ISO-Form 'YYYY-MM-DD', statt dessen einfach umzuwandeln:t.Date = _t::date
.
- Einfache Anführungszeichen für Werte :
-
Die Namen der Ausgabespalten sind im Funktionskörper sichtbar. Tabellenqualifizierende Spalte mit demselben Namen. Besser noch, vermeiden Sie solche Namenskonflikte von vornherein! Siehe:
-
Keine Notwendigkeit für dynamisches SQL mit
EXECUTE
. Das Übergeben eines Datenwerts funktioniert nur mit einfachem SQL. - plpgsql ist nicht erforderlich. Die einfache Abfrage erfordert keine prozedurale Funktionalität.
LANGUAGE sql
macht den Job - wenn Sie überhaupt eine Funktion brauchen, scheint einfaches SQL für den Job gut geeignet zu sein.
Übrigens:Verwenden Sie keine einfachen Typnamen wie "Datum" als Bezeichner. Halten Sie sich an gültige Kleinbuchstaben. Verwandte: