我了解获得连接池后,应通过调用
清除所有软件包的状态sys.DBMS_SESSION.reset_package;
此外,应该清除上下文,但是,上下文具有名称空间。
我应该找到每个命名空间并清除它们吗?
如何找到所有名称空间? https://docs.oracle.com/cd/E18283_01/network.112/e16543/app_context.htm#CIHDAJDF
答案 0 :(得分:1)
您可以使用dbms_session.list_context
获取当前会话的现有上下文列表。
答案 1 :(得分:0)
然后似乎应该使用从连接池返回的每个连接来调用它。
CREATE OR REPLACE PROCEDURE prepare_connection
AS
context_info DBMS_SESSION.AppCtxTabTyp;
info_count PLS_INTEGER;
indx PLS_INTEGER;
BEGIN
DBMS_SESSION.LIST_CONTEXT ( context_info, info_count);
indx := context_info.FIRST;
LOOP
EXIT WHEN indx IS NULL;
DBMS_SESSION.CLEAR_CONTEXT(
context_info(indx).namespace,
context_info(indx).attribute,
null
);
indx := context_info.NEXT (indx);
END LOOP;
DBMS_SESSION.RESET_PACKAGE;
END;
/
create public synonym prepare_connection for prepare_connection;
grant execute on prepare_connection to public;