我编写了一个函数来选择队列中的一些通量并用更新的标志锁定它们。 我用光标做了它,效果很好。但是我需要获取我锁定的通道的ID以在我的应用程序中处理它们。
所以我开始编写一个函数:
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但我没有返回我的值。
你们有任何关于如何做到这一点的线索吗?
答案 0 :(得分:1)
关于你的问题本身,我可以看到函数返回的唯一两个原因&#34;没有价值&#34;将是:
SELECT
部分返回空集,FLUX_ID
为NULL
的记录。对于不可能的,可能是后面的选项给定列的名称,它将与您在每次迭代时覆盖结果的事实相当一致 - 以及ORDER BY
命令NULL
之后不是 - 默认为NULL
。