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.
级别声明的
我有一个查询可以根据特定条件更新一组记录。我想获取该更新语句的结果集的列并将其传回 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.