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