Я пытаюсь превратить выделение в функцию в жабе /Oracle
Я пытаюсь превратить этот выбор в функцию. Вместо sysdate пользователь даст свою собственную дату, которую он хотел видеть. (Извините за плохой английский).
SELECT trunc(sysdate),
trunc(sysdate) - 1,
trunc(sysdate) - 2,
trunc(sysdate) - 3,
trunc(last_day(sysdate)-1, 'mm'),
add_months(trunc(sysdate, 'MM'), -1) first_day_of_last_month,
add_months(trunc(sysdate, 'MM'), -2) first_day_of_last_month,
add_months(trunc(sysdate, 'MM'), -3) first_day_of_last_month,
add_months(trunc(sysdate, 'Q'), -6) first_day_of_last_quarter,
add_months(trunc(sysdate, 'Q'), -9) first_day_of_last_quarter,
add_months(trunc(sysdate, 'Q'), -12) first_day_of_last_quarter,
add_months(trunc(sysdate, 'Q'), -15) first_day_of_last_quarter,
add_months(trunc(sysdate, 'Q'), -18) first_day_of_last_quarter
FROM dual;
Результат должен выглядеть примерно так в 1 строке
1/7/2019 1/6/2019 1/5/2019 1/4/2019 1/1/2019 12/1/2018 11/1/2018 10/1/2018 7/1/2018 4/1/2018 1/1/2018 10/1/2017 7/1/2017
1 ответ
Решение
Вы можете создать функцию, возвращающую курсор ref.
CREATE FUNCTION get_dates(pdt_ref_date IN DATE)
RETURN SYS_REFCURSOR IS
pcr_result SYS_REFCURSOR;
BEGIN
OPEN pcr_result FOR
SELECT
trunc(pdt_ref_date),
trunc(pdt_ref_date) - 1,
trunc(pdt_ref_date) - 2,
trunc(pdt_ref_date) - 3,
trunc(last_day(pdt_ref_date)-1, 'mm'),
add_months(trunc(pdt_ref_date, 'MM'), -1) first_day_of_last_month,
add_months(trunc(pdt_ref_date, 'MM'), -2) first_day_of_last_month,
add_months(trunc(pdt_ref_date, 'MM'), -3) first_day_of_last_month,
add_months(trunc(pdt_ref_date, 'Q'), -6) first_day_of_last_quarter,
add_months(trunc(pdt_ref_date, 'Q'), -9) first_day_of_last_quarter,
add_months(trunc(pdt_ref_date, 'Q'), -12) first_day_of_last_quarter,
add_months(trunc(pdt_ref_date, 'Q'), -15) first_day_of_last_quarter,
add_months(trunc(pdt_ref_date, 'Q'), -18) first_day_of_last_quarter
FROM dual;
RETURN pcr_result;
END;
Который может быть использован следующим образом:
SELECT get_dates(SYSDATE)
FROM DUAL;
Обратите внимание, что:
- Я не знаю назначение этой функции, поэтому я ее назвал
get_dates
- Вам может потребоваться определить эту функцию в пакете, особенно если у вас есть несколько связанных функций / процедур