に動作していないOracle関数以下、ROWNUMは
DROP FUNCTION get_mapper_requests;
CREATE OR REPLACE FUNCTION get_mapper_requests(p_status IN NUMBER, p_rownum IN NUMBER)
RETURN SYS_REFCURSOR
AS
CUR_MED_MAPPER_STATUS SYS_REFCURSOR;
BEGIN
dbms_output.put_line('Status Value:'||p_status);
dbms_output.put_line('Row Count:'||p_rownum);
OPEN CUR_MED_MAPPER_STATUS FOR SELECT cmd_id,status FROM CDFDBA.MED_COM_MAPPER_CMDS WHERE
STATUS=p_status and ROWNUM < p_rownum;
RETURN CUR_MED_MAPPER_STATUS;
END;
で上記の機能を見てください、私は変数p_rownumに任意の整数値を渡す場合にもかかわらず、すべてのレコードを返します。 p_rownum = 10であれば元の場合、この関数は
がサポートしてくださいブロック
DECLARE
c SYS_REFCURSOR;
v VARCHAR2(1000);
v1 VARCHAR2(1000);
BEGIN
dbms_output.put_line('Hello');
c := get_mapper_requests(0, 10);
LOOP
FETCH c INTO v,v1;
dbms_output.put_line('Value from cursor: '||v||' '||v1);
END LOOP;
CLOSE c;
END;
/
を呼び出すと、すべてのレコードを返します。
驚くばかりです。それは今働いた。しかし、ここで私はカーソルが10の値を渡すときにカーソルが10のレコードしか持たないと仮定しました。この状況についてもっと詳しく教えてください。 – Hari
'LOOP'は魔法のようにカーソルに縛られていません。したがって、明示的にループを壊す必要があります。あなたのカーソルは9行( '<10')をフェッチしていましたが、ループは永遠に続き、' v'と 'v1'は「未定義」(' NULL'を意味すると思います)に設定されています。つまり、フェッチが何も返さないとき(つまりカーソルの終わり)ループが抜けるということです。 – Sodved