我编写了一个函数来选择队列中的某些通量并使用更新的标志锁定它们。 我用光标做了它,它工作得很好。但我需要获得我锁定的流量的ID,以便在我的应用程序中处理它们。获取PLSQL函数的值数组
所以我开始编写一个函数:
CREATE OR REPLACE Function getIDArray
RETURN VARCHAR2 is
arr varchar2(1000);
CURSOR flux_to_process
IS
SELECT FLUX_ID, LOCKED_FLAG
FROM (
SELECT FLUX_ID, FLUX, GROUP_STORE_ID, STORE_ID, REFID, FLUX_TYPE, LOCKED_FLAG
FROM DEV_ISB_TRANSACTIONS.BUFFER_FLUX
WHERE status = 0
AND LOCKED_FLAG = 0
ORDER BY DATE_CREATION ASC)
WHERE ROWNUM <= 8;
BEGIN
FOR flux_rec IN flux_to_process
LOOP
IF flux_rec.LOCKED_FLAG = 0
THEN
UPDATE DEV_ISB_TRANSACTIONS.BUFFER_FLUX
SET LOCKED_FLAG = 1
WHERE FLUX_ID = flux_rec.FLUX_ID;
arr := flux_rec.FLUX_ID;
else exit;
COMMIT;
END IF;
END LOOP;
RETURN arr;
END;
的函数编写返回OK,但我没有回我的价值观。
你们有什么线索怎么做?
如果您的游标查询只返回一行,为什么使用游标和循环? ('WHERE ROWNUM <= 1') – Aramillo
因为它可以返回多于一行,实际上它是我应用程序中的一个变量。我编辑了这个问题:) – Xavier
@angezanetti也许我错了,但乍一看,所有这些对于一个简单的任务似乎都过于复杂。难道你不能只使用一个请求来做所有这些工作吗?UPDATE ... WHERE ... IN(SELECT ...)RETURNING ... BLUK COLLECT INTO ...'(http://docs.oracle.com/ cd/B19306_01/appdev.102/b14261/returninginto_clause.htm#CJAGFGDE) –