【发布时间】:2015-11-23 10:12:43
【问题描述】:
我有一个包含文档 ID 的 PL/SQL TABLE TYPE 结果集。
我可以毫无问题地遍历结果集,但问题是我必须从函数返回一个 sys_refcursor,但我无法将循环中的值收集到游标中。
TYPE table_typ IS TABLE OF DOCUMENT_QUEUE.ENV_ID%TYPE INDEX BY PLS_INTEGER;
FUNCTION GET_DOCS()
RETURN SYS_REFCURSOR
IS
LS_CUR SYS_REFCURSOR;
LR_UPDATED_ROWS table_typ;
BEGIN
UPDATE DOCUMENT_QUEUE DQ
...
RETURNING DQ.ENV_ID BULK COLLECT INTO LR_UPDATED_ROWS;
-- Need to collect all of the following rows into the cursor
FOR indx IN NVL (LR_UPDATED_ROWS.FIRST, 0) .. NVL (LR_UPDATED_ROWS.LAST, -1)
LOOP
SELECT * FROM DOCUMENT_QUEUE DQ WHERE DQ.ENV_ID = LR_UPDATED_ROWS(indx);
END LOOP;
RETURN LS_CUR;
END GET_DOCS;
欢迎所有帮助和提示。
【问题讨论】:
-
FOR 循环中的 SQL 会出错,因为 PL/SQL 需要一个 INTO 子句。
-
现在是的。目前它是为了展示我想要实现的目标。也许有一种方法可以在不使用循环的情况下做到这一点,但我一直找不到。
-
是的,循环不需要光标。您可以使用 OPEN CURSOR FOR 语句。有关更多详细信息和工作演示,请参阅答案。