我有多次执行另一个存储过程的存储过程。我需要联合并返回数据,这是我在执行第二个程序后所拥有的。
我能否以某种方式将来自多个游标的数据合并到另一个游标中?没有临时表或类似表的数据类型是可能的吗?
EDIT:union的游标数实际上是n(其中n是1,2,3等,由另一个程序检测)。
例如:
CREATE OR REPLACE PROCEDURE proc_data
( data_out OUT SYS_REFCURSOR
) IS
BEGIN
OPEN data_out FOR SELECT '1' NUM FROM dual;
END;
/
CREATE OR REPLACE PROCEDURE proc_result
( data_out OUT SYS_REFCURSOR
) IS
data1 SYS_REFCURSOR;
data2 SYS_REFCURSOR;
BEGIN
PROC_DATA(data1);
PROC_DATA(data2);
-- select data1 and data2 into data_out - how?
END;
/
SET SERVEROUTPUT ON
DECLARE
data_out SYS_REFCURSOR;
temp_row VARCHAR2(10);
BEGIN
PROC_RESULT(data_out);
LOOP
FETCH data_out INTO temp_row;
EXIT WHEN data_out%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(temp_row);
END LOOP;
CLOSE data_out;
END;
/
预期产出:
---
1
1
答案 0 :(得分:3)
您可以通过创建pipelined function来实现此目的,这将允许您执行
select table(PROC_DATA(data1)) union table(PROC_DATA(data2))
答案 1 :(得分:2)
不,这是不可能的。 AskTom上有关于这个问题的a nice discussion,看看可能会有一些解决方法可以帮助你。