【发布时间】:2023-03-11 04:20:01
【问题描述】:
我试图从 ORACLE 中的表中选择一些行,同时更新所选行的状态。我找到了一种使用存储函数和游标的方法,但在使用游标更新后我无法返回行。这是我的代码:
CREATE OR REPLACE FUNCTION FUNCTION_NAME
RETURN SYS_REFCURSOR
IS
l_return SYS_REFCURSOR;
CURSOR c_operations IS
SELECT * FROM TABLE1
WHERE STATUS != 'OK'
FOR UPDATE OF TABLE1.STATUS;
BEGIN
FOR r_operation IN c_operations
LOOP
UPDATE
TABLE1
SET
TABLE1.STATUS = 'OK'
WHERE
TABLE1.ID_TABLE1 = r_operation.ID_TABLE1;
END LOOP;
COMMIT;
-- Missing conversion from cursor to sys_refcursor
RETURN l_return;
END;
更新正在运行,但我仍然想念如何返回游标中的更新行(c_operations)。
谢谢。
【问题讨论】:
-
@APC 不,我想要所有更新行的列表。
-
@APC 这是我实际功能的简化,我想更新具有特定状态的行并锁定它们,因为我有大量数据并且所有数据都必须发生在同一个数据库连接中。这就是为什么我需要一个带有 select * 的存储函数进行更新,然后更新选定的值。然后将所有选定的值返回给我的程序来处理它们。有点复杂……
标签: oracle stored-procedures plsql stored-functions