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