UPDATE 语句:返回到 refcursor

UPDATE statement: Returning into refcursor

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

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

我猜想有一种方法可以将 RETURNING 语句的结果放入我的光标中。我该怎么做?

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

RETURNING my_column 
     BULK COLLECT INTO my_collection;

然后

OPEN p_rc
 FOR SELECT *
       FROM TABLE( my_collection );

虽然可行,但也有一些注意事项。如果你期望 UPDATE 修改大量的行(或者你期望许多会话是 运行 这个代码),将所有这些数据存储在一个集合中可能会消耗大量 space 在 PGA 中,这可能会对性能产生负面影响。将一堆数据读入集合中只是为了将其全部发送回 SQL 引擎也往往有点不雅。而且,正如我最初所说,这假设您的集合是在 SQL 级别声明的,而不是在 PL/SQL.

级别声明的