如何从游标Oracle/Toad获取数据
我有一个函数,它返回带有多个日期值的游标,我需要将这些数据一个接一个地提取到以下位置:如何从游标Oracle/Toad获取数据,oracle,plsql,cursor,toad,Oracle,Plsql,Cursor,Toad,我有一个函数,它返回带有多个日期值的游标,我需要将这些数据一个接一个地提取到以下位置: CALLMISUSER01.INSERT_DEP004(First data of the cursor, Second data of the cursor, Third data of the cursor. . . etc); 我的主要职能是: Create or replace FUNCTION Rep_dates(pdt_ref_date IN DATE) RETURN SYS_REFCURSOR
CALLMISUSER01.INSERT_DEP004(First data of the cursor, Second data of the cursor, Third data of the cursor. . . etc);
我的主要职能是:
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),
trunc(pdt_ref_date) - 1,
trunc(pdt_ref_date) - 2,
trunc(pdt_ref_date) - 3,
trunc(pdt_ref_date, '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;
首先,为函数返回的
REF CURSOR
列指定适当的别名。然后,您可以定义一个匹配的记录
类型,并提取
光标。这是一种可以引用各个列的方法。另一个选项是为每列定义单独的变量
功能
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;
/
首先,为函数返回的
REF CURSOR
列指定适当的别名。然后,您可以定义一个匹配的记录
类型,并提取
光标。这是一种可以引用各个列的方法。另一个选项是为每列定义单独的变量
功能
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;
/
您的过程和函数是在包中创建的吗?您的过程和函数是在包中创建的吗?非常感谢您的回复@Kaushik Nayak非常感谢您的回复@考希克纳亚克