У меня CTE, как показано ниже,
WITH extract_dow AS (
SELECT EXTRACT(DOW FROM TIMESTAMP '1994-03-15'::DATE) AS dow
)
,name_day AS(
SELECT
CASE WHEN dow = 0 THEN (SELECT 'Minggu'::TEXT AS day)
ELSE
CASE WHEN dow = 1 THEN (SELECT 'Senin'::TEXT AS day)
ELSE
CASE WHEN dow = 2 THEN (SELECT 'Selasa'::TEXT AS day)
ELSE
CASE WHEN dow = 3 THEN (SELECT 'Rabu'::TEXT AS day)
ELSE
CASE WHEN dow = 4 THEN (SELECT 'Kamis'::TEXT AS day)
ELSE
CASE WHEN dow = 5 THEN (SELECT 'Jumat'::TEXT AS day)
ELSE
CASE WHEN dow = 6 THEN (SELECT 'Sabtu'::TEXT AS day)
ELSE (SELECT 'Inputan Salah'::TEXT AS day)
END
END
END
END
END
END
END
FROM extract_dow
)
, extract_age AS (
SELECT ((CURRENT_DATE - '1994-03-15'::DATE)/365) AS age
)
SELECT 'Anda Lahir :' || a.day || ',' || b.age || ' Tahun' AS "Keterangan" FROM name_day a, extract_age b
Его для генерации дня в тексте даты '1994-03-15' и возраста, рассчитанного по текущему, когда его выполнение мы имеем в выходных данных:
"Anda Lahir :Selasa,24 Tahun"
Когда я пытаюсь преобразовать его в функцию, показанную ниже:
> -- Function: function_birthday(date)
>
> -- DROP FUNCTION function_birthday(date);
>
> CREATE OR REPLACE FUNCTION function_birthday(inputan date)
> RETURNS text AS
> $BODY$
> DECLARE
> perintah text;
> BEGIN
>
> perintah := $sql$
>
> WITH extract_dow AS ( SELECT EXTRACT(DOW FROM TIMESTAMP '$sql$ || inputan || $sql$'::DATE) AS dow )
> ,name_day AS( SELECT CASE WHEN dow = 0 THEN (SELECT 'Minggu'::TEXT AS day)
> ELSE CASE WHEN dow = 1 THEN (SELECT 'Senin'::TEXT AS day)
> ELSE
> CASE WHEN dow = 2 THEN (SELECT 'Selasa'::TEXT AS day)
> ELSE
> CASE WHEN dow = 3 THEN (SELECT 'Rabu'::TEXT AS day)
> ELSE
> CASE WHEN dow = 4 THEN (SELECT 'Kamis'::TEXT AS day)
> ELSE
> CASE WHEN dow = 5 THEN (SELECT 'Jumat'::TEXT AS day)
> ELSE
> CASE WHEN dow = 6 THEN (SELECT 'Sabtu'::TEXT AS day)
> ELSE (SELECT 'Inputan Salah'::TEXT AS day)
> END
> END
> END
> END
> END
> END
> END FROM extract_dow )
>
>
> , extract_age AS ( SELECT ((CURRENT_DATE - '$sql$ || inputan || $sql$'::DATE)/365) AS age)
> SELECT 'Anda Lahir :' || a.day || ',' || b.age || ' Tahun' AS "Keterangan" FROM name_day a, extract_age b
>
> RETURN *;
> $sql$;
> EXECUTE perintah;
> END;
> $BODY$
> LANGUAGE plpgsql VOLATILE COST 100;
> ALTER FUNCTION function_birthday(date)
> OWNER TO postgres;
Но когда я выполняю его с
SELECT public.function_birthday ('1994-03-15 ');
У меня есть ошибка
ОШИБКА: синтаксическая ошибка в или около "RETURN"
LINE 36: RETURN *;
КОНТЕКСТ: PL / pgSQL-функция function_birthday (date) строка 43 в операторе EXECUTE
********** Ошибка **********
ОШИБКА: синтаксическая ошибка в или около «ВОЗВРАТА»
Состояние SQL: 42601
Контекст: строка 43 функции function_birthday (date) PL / pgSQL в операторе EXECUTE
Мой вопрос: где ошибка в моей функции, или я пишу в неправильной структуре функции, я искал и искал, чтобы решить ее (Как преобразовать мой CTE в функцию)?
Спасибо за Help, ^ _ ^