Това може да направи това, което търсите:
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;
-
Изразът
where to_date(Date, "YYYY-MM-DD")==%I',_t);
е назад по много начини.- Единични кавички за стойности :
'YYYY-MM-DD'
. - Операторът е
=
, а не==
. - Изглежда, че наистина искате
t.Date = to_date(_t, 'YYYY-MM-DD')
- И докато
_t
е в стандартна ISO форма 'ГГГГ-ММ-ДД', по-скоро просто преобразувайте вместо това:t.Date = _t::date
.
- Единични кавички за стойности :
-
Имената на изходните колони се виждат в тялото на функцията. Колона за квалифициране на таблица със същото име. Още по-добре, като начало избягвайте подобни конфликти с имена! Вижте:
-
Няма нужда от динамичен SQL с
EXECUTE
. Предаването на стойност на данни работи добре с обикновен SQL. - Няма нужда от plpgsql. Простата заявка не изисква никакви процедурни функции.
LANGUAGE sql
върши работата - ако изобщо имате нужда от функция, обикновеният SQL изглежда добре за тази работа.
Настрана:не използвайте имена на основни типове като "дата" като идентификатор. Придържайте се към легалните идентификатори с малки букви. Свързани: