将游标中的数据合并为一个

Posted

技术标签:

【中文标题】将游标中的数据合并为一个【英文标题】:Union data from cursors into one 【发布时间】:2010-11-03 07:43:10 【问题描述】:

我有多次执行另一个存储过程的存储过程。我需要联合并返回数据,这是我在执行第二个过程后拥有的。

我能否以某种方式将多个游标中的数据合并到另一个游标中?没有临时表或类似表的数据类型是可能的吗?

编辑:联合的光标计数实际上是 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   

【问题讨论】:

【参考方案1】:

不,这是不可能的。 AskTom 有a nice discussion 讨论这个问题,看看那里提供的一些解决方法可能对您有所帮助。

【讨论】:

【参考方案2】:

您可以通过创建pipelined function 来实现这一点,这将允许您这样做

select table(PROC_DATA(data1)) union table(PROC_DATA(data2))

【讨论】:

n 是常量还是变量? n - 变量。这只是用于解释我的问题的示例,在实际数据库中,联合的游标计数正在被另一个程序检测到。 然后就可以建立select表(PROC_DATA(data1)) union table(PROC_DATA(data2)) union table(PROC_DATA(data3)) ...动态查询并执行

以上是关于将游标中的数据合并为一个的主要内容,如果未能解决你的问题,请参考以下文章

将 Informix 游标转换为 MSSQL 游标

Sql中的游标是干嘛的

SQL Server利用游标将学生表中的成绩转化为绩点

SQL Server中的游标是啥意思?

游标的作用是啥?

Sql中的游标是干嘛的