我有返回带有多个日期值的游标的函数,我需要逐个获取这些数据:
CALLMISUSER01.INSERT_DEP004(光标的第一个数据,光标的第二个数据,……
首先,为返回的列提供适当的别名 REF CURSOR 从你的功能。然后你可以定义一个匹配 RECORD 类型和 FETCH 光标进入它。这是您可以引用各个列的一种方法。其他选项是为每列定义单独的变量。
REF CURSOR
RECORD
FETCH
的 功能 强>
CREATE OR REPLACE FUNCTION rep_dates(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, trunc(pdt_ref_date, 'mm') as pdt_ref_date_mon , add_months(trunc(pdt_ref_date, 'MM'), -1) first_day_of_last_month, add_months(trunc(pdt_ref_date, 'MM'), -2) first_day_of_2nd_last_month, add_months(trunc(pdt_ref_date, 'MM'), -3) first_day_of_3rd_last_month, add_months(trunc(pdt_ref_date, 'Q'), -6) first_day_of_last_quarter_1, add_months(trunc(pdt_ref_date, 'Q'), -9) first_day_of_last_quarter_2, add_months(trunc(pdt_ref_date, 'Q'), -12) first_day_of_last_quarter_3, add_months(trunc(pdt_ref_date, 'Q'), -15) first_day_of_last_quarter_4, add_months(trunc(pdt_ref_date, 'Q'), -18) first_day_of_last_quarter_5 FROM dual; RETURN pcr_result; END; /
的 呼叫阻止 强>
DECLARE m_curs SYS_REFCURSOR; TYPE pcr_rec IS RECORD ( pdt_ref_date DATE, pdt_ref_date_1 DATE, pdt_ref_date_2 DATE, pdt_ref_date_3 DATE, pdt_ref_date_mon DATE, first_day_of_last_month DATE, first_day_of_2nd_last_month DATE, first_day_of_3rd_last_month DATE, first_day_of_last_quarter_1 DATE, first_day_of_last_quarter_2 DATE, first_day_of_last_quarter_3 DATE, first_day_of_last_quarter_4 DATE, first_day_of_last_quarter_5 DATE ); pcr_res pcr_rec; BEGIN m_curs := rep_dates(SYSDATE);--pass your pdt_ref_date FETCH m_curs INTO pcr_res; CALLMISUSER01.INSERT_DEP004(pcr_res.pdt_ref_date,pcr_res.pdt_ref_date_1, --..... --all other column aliases. pcr_res.first_day_of_last_quarter_5); END; /