UPDATE语句:返回refcursor

时间:2015-02-26 16:03:29

标签: oracle cursor sql-update sql-returning

我有一个查询,根据特定条件更新一组记录。我想获取该update语句的结果集的列,并将其传递回refcursor。

我可以使用RETURNING INTO或我的RETURNING myrows BULK COLLECT INTO ...来获取结果集。但是,我不确定如何使用游标进行此操作 - 您无法使用更新语句执行OPEN cursor FOR

我猜测有一种方法可以将RETURNING语句的结果存入我的光标。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

假设您已定义SQL集合(而不是PL / SQL集合),您应该能够

RETURNING my_column 
     BULK COLLECT INTO my_collection;

然后

OPEN p_rc
 FOR SELECT *
       FROM TABLE( my_collection );

虽然有效,但有一些警告。如果您希望UPDATE修改大量行(或者您希望许多会话运行此代码),则将所有这些数据存储在集合中可能会占用PGA中的大量空间,这可能会产生负面影响性能。将一堆数据读入集合只是为了将它全部发送回SQL引擎也往往有点不优雅。而且,正如我最初所说,这假设您的集合是在SQL级别声明的,而不是在PL / SQL中声明。