我編寫了一個函數來選擇隊列中的某些通量並使用更新的標誌鎖定它們。 我用光標做了它,它工作得很好。但我需要獲得我鎖定的流量的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) –