1

SPを持っています

create or replace PROCEDURE         ALTERNATE_NAME_LOOKUP
 ( P_NAME IN VARCHAR2,
  P_TYPE IN VARCHAR2, retCursor OUT SYS_REFCURSOR
 )

本体の残りの部分は貼り付けませんでした。上記の手順は、それ自体で正常に機能します (もちろん本体で)

ここで、別のストアド プロシージャから呼び出したいと思い、refcursor をトラバースしたいと考えています。

私がやっていることは、コンパイル時にan_last_cur SYS_REFCURSOR;ALTERNATE_NAME_LOOKUP プロシージャを宣言して呼び出すことです。ALTERNATE_NAME_LOOKUP(p_req.LASTNAMEEXP,c_LAST, an_last_cur);しかし、次のブロックを追加すると-

 ALTERNATE_NAME_LOOKUP('Roman Reigns','LAST',an_last_cur);
      For alt in an_last_cur
      Loop
        DBMS_OUTPUT.PUT_LINE('ok');
      end loop;

コンパイルエラーが発生します-

 PLS-00221: 'AN_LAST_CUR' is not a procedure or is undefined

私は何を間違っていますか?

4

2 に答える 2

2

これを試してみてください。お役に立てれば。私はワークスペースを持っていないので、構文エラーがある場合はご容赦ください。

CREATE OR REPLACE PROCEDURE test_ref_prc
  ( p_ref_out  OUT sys_refcursor)
AS
BEGIN
OPEN p_ref_out FOR
  SELECT LEVEL  FROM DUAL CONNECT BY LEVEL < 10;
END;

CREATE OR REPLACE PROCEDURE test_ref2
AS
refc sys_refcursor;
num_ntt NUMBER_NTT;
BEGIN
test_ref_prc(refc);
FETCH refc BULK COLLECT INTO num_ntt;
FOR I IN num_ntt.FIRST..num_ntt.LAST LOOP
dbms_output.put_line(num_ntt(i));
END LOOP;
END;

exec test_ref2;
于 2016-01-19T07:41:14.297 に答える