Когда пользователь указывает вам дату, например 2019/02/03, моя функция должна возвращать дату, которая должна быть такой: 2019/02/03, 2019/02/02, 2019/02/01, 2019/01/ 31, 2019/12/31, 2019/11/31, 2019/09/30, 2019/06/30, 2019/03/31, 2018/12/31
Эта функцияУ меня ошибка компиляции, и я не уверен, что это такое.
CREATE OR REPLACE FUNCTION rep_datesTest(pdt_ref_date IN DATE)
RETURN SYS_REFCURSOR IS
pcr_result SYS_REFCURSOR;
BEGIN
OPEN pcr_result FOR
SELECT
trunc(pdt_ref_date) as pdt_ref_date,
trunc(pdt_ref_date) - 1 pdt_ref_date_1,
trunc(pdt_ref_date) - 2 pdt_ref_date_2,
trunc(pdt_ref_date) - 3 pdt_ref_date_3,
add_months(Last_DAY(trunc(trunc(pdt_ref_date) - 3, 'MM')), -1) first_day_of_last_month,
add_months(Last_DAY(trunc(trunc(pdt_ref_date) - 3, 'MM')), -2) first_day_of_2nd_last_month,
add_months(Last_DAY(trunc(trunc(pdt_ref_date) - 3, 'MM')), -3) first_day_of_3nd_last_month,
add_months(Last_DAY(Case when EXTRACT(MONTH from first_day_of_3nd_last_month)>9 and EXTRACT(MONTH from first_day_of_3nd_last_month)<=12
then to_date(EXTRACT(YEAR FROm first_day_of_3nd_last_month)||'-09-30','yyyy-mm-dd')
when EXTRACT(MONTH from first_day_of_3nd_last_month)<=9 and EXTRACT(MONTH from first_day_of_3nd_last_month)>6
then to_date(EXTRACT(YEAR FROm first_day_of_3nd_last_month)||'-06-30','yyyy-mm-dd')
when EXTRACT(MONTH from first_day_of_3nd_last_month)<=6 and EXTRACT(MONTH from first_day_of_3nd_last_month)>3
then to_date(EXTRACT(YEAR FROm first_day_of_3nd_last_month)||'-03-31','yyyy-mm-dd')
when EXTRACT(MONTH from first_day_of_3nd_last_month)<=3 and EXTRACT(MONTH from first_day_of_3nd_last_month)>12
then to_date(EXTRACT(YEAR FROm first_day_of_3nd_last_month)||'-12-31','yyyy-mm-dd') END
)) first_day_of_last_quarter_1,
add_months(Last_DAY(trunc(first_day_of_last_quarter_1, 'Q')), -8) first_day_of_last_quarter_2,
add_months(Last_DAY(trunc(first_day_of_last_quarter_1, 'Q')), -11) first_day_of_last_quarter_3,
add_months(Last_DAY(trunc(first_day_of_last_quarter_1, 'Q')), -14) first_day_of_last_quarter_4,
add_months(Last_DAY(trunc(first_day_of_last_quarter_1, 'Q')), -17) first_day_of_last_quarter_5
FROM dual;
RETURN pcr_result;
END;