SYS_REFCURSOR
パラメータとしてを持つストアド プロシージャがありOUT
ます。署名は、たとえば次のようになります。
PROCEDURE myProc(p_someID IN INTEGER, p_cursor OUT SYS_REFCURSOR);
この手順を関数から呼び出します。関数では、名前が付けられた列をスカラーのネストされたテーブルにコピーする必要がありclientID
ますp_cursor
。
私は次のようにやっています:
CREATE OR REPLACE FUNCTION myFunction
RETURN sys_refcursor
IS
someID INTEGER := 1234;
myCursor SYS_REFCURSOR;
TYPE t_clientID_nt IS TABLE OF NUMBER(16,0);
clientID_nt t_clientID_nt;
otherID SYS_REFCURSOR;
BEGIN
myProc (someID, myCursor);
FOR i IN myCursor
LOOP
clientID_nt.EXTEND;
clientID_nt (clientID_nt.COUNT) := i.clientID;
END LOOP;
-- Other code that opens the cursor otherID
-- based on the IDs in clientID_nt
...
...
RETURN otherID;
END;
/
この関数をコンパイルしようとすると、次のエラーが表示されます。
PLS-00221: 'CLIENTID_NT' is not a procedure or is undefined
コードの 11 行目にあります。
このようなカーソルからフェッチして一括収集する方法についてのヘルプは大歓迎です。