oracle9i以上通过GLOBALLY ACCESSED CONTEXT方式可以实现。但在11GR2之前,这个特性不能在RAC环境下使用,让我们稍微感到一些遗憾.
首先,用户必须有CREATE ANY CONTEXT权限.
为了隔离访问,我以包的方式说明如何声明/修改/获取全局变量.
---- 创建CONTEXT并和一个包绑定:
Create or Replace Context AppContext using BasePkg ACCESSED GLOBALLY
---- 创建一个包来写入变量:
create or replace package BasePkg
as
procedure SetAppContext( name in varchar2,value in varchar2 );
procedure init;
end BasePkg;
----包体内容
create or replace package body BasePkg
as
G_SESSION_ID Constant Number := -1;
procedure init
IS
begin
NULL;
end;
procedure SetAppContext( name in varchar2,value in varchar2 )
as
begin
dbms_session.setAppContext ( 'FMIS_BASE', name, value, NULL, G_SESSION_ID );
end;
begin
dbms_session.set_identifier( g_session_id );
end BasePkg ;
--- 每次初始化以后
EXEC BasePkg .init;
--就可以跨session,访问全局变量了
select sys_context( 'FMIS_BASE' ,'变量名' ) from dual