関数を呼び出すプロシージャがあります。数回のプロシージャ呼び出しの後、その関数はもう実行されていません。また、スローされる例外はありません。ブラウザからsession_idを削除して更新すると、すべてが期待どおりに機能し始めますが、永続的ではありません..数回のプロシージャコールの後、再び奇妙な動作を始めています.セッションIDを削除するときに何か言われた記事を赤くしました.次に、すべてのSYS_REFCURSORも削除されます。
以下に変更したコード例を示しますが、おおよそすべてがどのように見えるかを示していますが、それが許可されていないため、実際のコードを表示できませんでした。
このようなことが起こる可能性がある理由と、いくつかの意見をお聞きしたいと思います。
DA から呼び出されるプロシージャ:
PROCEDURE search_user(i_max_row_count IN INTEGER,
i_session_id IN NUMBER,
i_user_id IN some_common_logic.user_ids,
cur_out OUT SYS_REFCURSOR)
IS
BEGIN
GetResult(i_max_row_count, i_session_id, cur_out);
END;
関数を呼び出す手順:
PROCEDURE getresult(i_max_row_count IN INTEGER,
i_session_id IN NUMBER,
cur_out OUT SYS_REFCURSOR)
IS
--some variables
BEGIN
OPEN cur_out FOR
SELECT
rownum,
users.user_id AS "ID"
FROM users
WHERE users.user_id IN (SELECT object_id
FROM TABLE (get_user_id(i_max_row_count, i_session_id)));
END;
呼び出されない関数:
FUNCTION Get_User_Id(i_max_row_count IN INTEGER,
i_session_id IN NUMBER)
RETURN FilterRows pipelined
IS
cur INTEGER := DBMS_SQL.OPEN_CURSOR;
BEGIN
DBMS_OUTPUT.PUT_LINE('Get_User_Id is called!');
--some logic here
DBMS_SQL.CLOSE_CURSOR(cur);
RETURN;
END;