如何获取 plsql table 类型的值到 refcursor
how to fetch plsql table type values into refcursor
我正在尝试创建一个过程,其中正在调用另一个过程并且它是 returns pl/sql table 类型。如何将 plsql table 的值收集到 ref cursor 和 return 作为 OUT 类型 refcursor。请帮忙
谢谢!
我有这段代码:p_rec是table类型
DECLARE
p_rec PORTAL_LOAD_PKG.header_tab@test_link;
p_status VARCHAR2(200);
BEGIN
DASHBOARD_PRC@test_link('XYZ LIMITED', p_rec, p_status);
END;
以上代码工作正常,但我的要求是创建一个过程,该过程在 refcursor 中 returns p_rec 的值。
Finally resolved.
首先我们必须在本地创建一个对象和 table 类型。对象定义应该
与您在远程数据库上声明的记录类型相同。
CREATE OR REPLACE TYPE dashboard_obj AS OBJECT (
i_num VARCHAR2(500),
desc VARCHAR2(1000),
od_num VARCHAR2(200),
i_amount NUMBER,
amount_paid NUMBER,
status VARCHAR2(200),
terms_date DATE,
i_id NUMBER,
v_id NUMBER
);
之后创建该对象的 table 类型。
CREATE OR REPLACE TYPE tab1 IS
TABLE OF dashboard_obj;
现在创建程序:
CREATE OR REPLACE PROCEDURE proc_test (
recordset OUT SYS_REFCURSOR
) IS
p_rec portal_load_pkg.header_tab@test_link;
p_status VARCHAR2(200);
obj dashboard_obj;
v_tab tab1 := tab1 ();
BEGIN
dashboard_prc@test_link ( 'XYZ LIMITED',p_rec,p_status );
FOR i IN 1.._rec.count LOOP
v_tab.extend;
v_tab(v_tab.count) := dashboard_obj(p_rec(i).i_num,
p_rec(i).desc,
p_rec(i).od_num,
p_rec(i).i_amount,
p_rec(i).amount_paid,
p_rec(i).status,
p_rec(i).terms_date,
p_rec(i).i_id,
p_rec(i).v_id
);
END LOOP;
OPEN recordset FOR SELECT
*
FROM
TABLE ( v_tab );
END;
If there is any other solution, please let me know. Thanks!
我正在尝试创建一个过程,其中正在调用另一个过程并且它是 returns pl/sql table 类型。如何将 plsql table 的值收集到 ref cursor 和 return 作为 OUT 类型 refcursor。请帮忙
谢谢!
我有这段代码:p_rec是table类型
DECLARE
p_rec PORTAL_LOAD_PKG.header_tab@test_link;
p_status VARCHAR2(200);
BEGIN
DASHBOARD_PRC@test_link('XYZ LIMITED', p_rec, p_status);
END;
以上代码工作正常,但我的要求是创建一个过程,该过程在 refcursor 中 returns p_rec 的值。
Finally resolved.
首先我们必须在本地创建一个对象和 table 类型。对象定义应该 与您在远程数据库上声明的记录类型相同。
CREATE OR REPLACE TYPE dashboard_obj AS OBJECT (
i_num VARCHAR2(500),
desc VARCHAR2(1000),
od_num VARCHAR2(200),
i_amount NUMBER,
amount_paid NUMBER,
status VARCHAR2(200),
terms_date DATE,
i_id NUMBER,
v_id NUMBER
);
之后创建该对象的 table 类型。
CREATE OR REPLACE TYPE tab1 IS
TABLE OF dashboard_obj;
现在创建程序:
CREATE OR REPLACE PROCEDURE proc_test (
recordset OUT SYS_REFCURSOR
) IS
p_rec portal_load_pkg.header_tab@test_link;
p_status VARCHAR2(200);
obj dashboard_obj;
v_tab tab1 := tab1 ();
BEGIN
dashboard_prc@test_link ( 'XYZ LIMITED',p_rec,p_status );
FOR i IN 1.._rec.count LOOP
v_tab.extend;
v_tab(v_tab.count) := dashboard_obj(p_rec(i).i_num,
p_rec(i).desc,
p_rec(i).od_num,
p_rec(i).i_amount,
p_rec(i).amount_paid,
p_rec(i).status,
p_rec(i).terms_date,
p_rec(i).i_id,
p_rec(i).v_id
);
END LOOP;
OPEN recordset FOR SELECT
*
FROM
TABLE ( v_tab );
END;
If there is any other solution, please let me know. Thanks!