步驟
1. 建立套件定義陣列型別
CREATE OR REPLACE PACKAGE TEST IS
TYPE FILENAME_ARRAY IS TABLE OF VARCHAR2(1);
FILENAME FILENAME_ARRAY;
END TEST;
2. 建立預存程序輸出陣列
CREATE OR REPLACE PROCEDURE TEST_ARRAY(V_CFJG OUT TEST.FILENAME_ARRAY) IS
BEGIN
DECLARE
I NUMBER;
D_CFJG DIC_CFJG%ROWTYPE;
CURSOR C1 IS SELECT * FROM DIC_CFJG;
BEGIN
I := 0;
V_CFJG := TEST.FILENAME_ARRAY(); -- 陣列初始化
OPEN C1;
LOOP
FETCH C1 INTO D_CFJG;
EXIT WHEN C1%NOTFOUND;
I := I + 1;
V_CFJG.EXTEND;
V_CFJG(V_CFJG.COUNT) := D_CFJG.DM;
DBMS_OUTPUT.PUT_LINE(V_CFJG(V_CFJG.COUNT)); -- 測試輸出
END LOOP;
EXCEPTION
WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS');
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
END TEST_ARRAY;
說明
- 在套件中定義
TABLE OF 集合型別,預存程序參數使用該型別。
- 呼叫前需初始化陣列
V_CFJG := TEST.FILENAME_ARRAY()。
- 使用
EXTEND 擴展陣列大小,按索引賦值。
- 適用於需回傳多筆同型別資料的情境。