如何在oracle的存储过程中手动将行添加到游标中

Posted

技术标签:

【中文标题】如何在oracle的存储过程中手动将行添加到游标中【英文标题】:How to add rows into a cursor manually in stored procedure in oracle 【发布时间】:2013-03-01 04:26:08 【问题描述】:

我在存储过程中有一个游标。我想从查询中选择一些数据并将该数据插入游标,然后再次从另一个查询中选择一些数据并将该数据附加到同一个游标中。

我该怎么做?

【问题讨论】:

简单光标还是 ref_cursor man? @Thiyagu - 是的简单游标,我想从存储过程中返回该游标。 哈哈,所以没有人......对于这种情况,你必须使用 ref_cursor 【参考方案1】:

游标是 SQL 语句的只读句柄。游标没有数据。您不能将数据附加到游标。对游标唯一能做的就是获取下一行。

您可以将用于打开游标的 SQL 语句更改为UNION 一起使用两个不同的 SQL 语句,即

OPEN rc FOR 
  SELECT <<column list>>
    FROM table1
  UNION ALL
  SELECT <<column list>>
    FROM table2;

RETURN rc;

【讨论】:

有没有其他办法,我想要什么 @NamanGoyal - 我不太确定你想要完成什么。正如我所说,问题的陈述没有多大意义。如果您可以解释您要解决的业务问题以及合并两个未能解决问题的查询的结果是什么,我们或许可以提出替代方案。【参考方案2】:

我不知道程序返回值是如何在这里看到的,这里使用的是简单的 ref_cursor

create or replace function test_ref() return sys_refcursor is
     temp sys_refcursor;
   begin
     open temp for 'select * from hr.employees ;
     return v_rc;
   end;
   / 

【讨论】:

以上是关于如何在oracle的存储过程中手动将行添加到游标中的主要内容,如果未能解决你的问题,请参考以下文章

如何在Oracle中使用Java存储过程

如何使用c#执行返回多个游标的oracle存储过程

oracle存储过程中循环for in是如何使用的

Oracle 存储过程 - 游标内循环

oracle存储过程中循环for in是如何使用的

如何在游标中调用函数,游标是oracle中另一个过程的一部分