Dit zou kunnen doen wat u zoekt:
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;
-
De uitdrukking
where to_date(Date, "YYYY-MM-DD")==%I',_t);
is op meerdere manieren achteruit.- Enkele aanhalingstekens voor waarden :
'YYYY-MM-DD'
. - De operator is
=
, niet==
. - Het lijkt erop dat je echt wilt
t.Date = to_date(_t, 'YYYY-MM-DD')
- En terwijl
_t
is in standaard ISO-vorm 'YYYY-MM-DD', liever gewoon casten:t.Date = _t::date
.
- Enkele aanhalingstekens voor waarden :
-
De namen van uitvoerkolommen zijn zichtbaar in de hoofdtekst van de functie. Tabelkwalificerende kolom met dezelfde naam. Beter nog, vermijd het benoemen van dergelijke conflicten om mee te beginnen! Zie:
-
Geen dynamische SQL nodig met
EXECUTE
. Het doorgeven van een gegevenswaarde werkt prima met gewone SQL. - Plpgsql is niet nodig. De eenvoudige query vereist geen procedurele functionaliteit.
LANGUAGE sql
doet het werk - als je al een functie nodig hebt, lijkt gewone SQL prima voor het werk.
Terzijde:gebruik geen basistypenamen zoals "datum" als identifier. Houd u aan legale identificatiecodes in kleine letters. Gerelateerd: