几次过程调用后不调用流水线函数

时间:2015-02-17 15:16:18

标签: oracle sessionid sys-refcursor pipelined-function

我有一个调用函数的过程。在几次过程调用之后,它不再执行该函数。也没有抛出异常。当我从浏览器中删除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;

0 个答案:

没有答案