Синтаксис функции красного смещения - PullRequest
0 голосов
/ 11 июля 2019

Я изучал это снова и снова, не выясняя, что не так, я чувствую, что синтаксис этой функции правильный

Я пытался извлечь одинарные кавычки из plpgsql, трижды проверил на запятые, добавил тело к знакам доллара без удачи, я не могу понять, почему это я ошибаюсь. Возвращаемая таблица должна иметь правильный синтаксис, верно?

CREATE OR REPLACE FUNCTION fn_ytd_costs_of_business (param1 date)
RETURNS TABLE (year INTEGER, month TEXT , revenue FLOAT8 ,transactiondate TIMESTAMP , Flag varchar(28),)
AS 
$$
BEGIN
select
  extract(year from transactiondate) as year
  , to_char(transactiondate, 'Mon') as month
  --, extract(month from transactiondate) as month_number
  , sum(netamount) as revenue
  ,transactiondate
  ,Flag
from
  vw_costs_of_businesss_copy a

--where to_date(transactiondate, 'YYYY-MM-DD') <= '2019-06-07' and to_date(transactiondate, 'YYYY-MM-DD') ->=  concat(to_char(extract(year from '2019-01-01'), 'YYYY'),'01-01') --Convert the date param to year and concatenate with '01/01'
--where to_date(transactiondate, 'YYYY-MM-DD') <= '2019-06-07' and to_date(concat(to_char(extract(year from to_date('2019-01-01', 'YYYY-MM-DD'))),'01-01') , 'YYYY-MM-DD') >= '2019-01-01' --Convert the date param to year and concatenate with '01/01'
--where to_date(transactiondate, 'YYYY-MM-DD') <= '2019-06-07' and to_date(concat(to_char(Cas(extract(year from to_date('2019-01-01', 'YYYY-MM-DD')) as text ),'-01-01') , 'YYYY-MM-DD') >= '2019-01-01' --Convert the date param to year and concatenate with '01/01'
--where to_date(transactiondate, 'YYYY-MM-DD') <= '2019-06-07' and to_date(concat(to_char(Cast(extract(year from to_date('2019-01-01', 'YYYY-MM-DD')) as Text),'0000'),'-01') , 'YYYY-MM-DD') >= '2019-01-01' --Convert the date param to year and concatenate with '01/01'
where to_date(transactiondate, 'YYYY-MM-DD') <= $1 and to_date(transactiondate, 'YYYY-MM-DD')>= to_date(concat(to_char(Cast(extract(year from to_date($1, 'YYYY-MM-DD')-1) as Text),'0000'),'-01') , 'YYYY-MM-DD')

group by
  year
  , month
  ,transactiondate
 , Flag;

on a.
--order by  year;
END;
$$ 
LANGUAGE plpgsql;

это ошибка, которую я получаю:

ТАБЛИЦА ВОЗВРАТОВ (год INTEGER, месяц ТЕКСТ, доход FLOAT8, дата транзакции TIMESTAMP, флаг varchar (28),)

1 Ответ

0 голосов
/ 12 июля 2019

Возможно, ошибка в том, что TABLE не является допустимым типом RETURN.

Однако это неважно, поскольку пользовательской функции Amazon Redshift не разрешено SELECT данные из таблиц.Он может работать только с данными, переданными в функцию.

См .: Ограничения UDF - Amazon Redshift

В зависимости от вашего варианта использования, Хранимая процедура может подойти.Он не будет «возвращать» таблицу, но может CREATE INTO таблица.

...