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