【问题标题】:UPDATE statement: Returning into refcursorUPDATE 语句:返回到 refcursor
【发布时间】:2015-02-26 16:03:28
【问题描述】:
我有一个查询,它根据特定条件更新一组记录。我想获取该更新语句的结果集的列并将其传递回一个引用。
我可以使用RETURNING INTO 或在我的情况下使用RETURNING myrows BULK COLLECT INTO ... 来获得结果集。但是,我不确定如何使用游标进行这项工作 - 您不能使用更新语句执行 OPEN cursor FOR。
我猜有一种方法可以将RETURNING 语句的结果放入我的光标中。我该怎么做?
【问题讨论】:
标签:
oracle
cursor
sql-update
sql-returning
【解决方案1】:
假设您定义了一个 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 中声明的。