0

関数を呼び出すプロシージャがあります。数回のプロシージャ呼び出しの後、その関数はもう実行されていません。また、スローされる例外はありません。ブラウザから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;
4

0 に答える 0