从ConnectionPool中检索后准备Oracle Connection

时间:2018-07-15 16:21:31

标签: oracle

我了解获得连接池后,应通过调用

清除所有软件包的状态
sys.DBMS_SESSION.reset_package;

此外,应该清除上下文,但是,上下文具有名称空间。

我应该找到每个命名空间并清除它们吗?

如何找到所有名称空间? https://docs.oracle.com/cd/E18283_01/network.112/e16543/app_context.htm#CIHDAJDF

2 个答案:

答案 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;