OS:windos xp sp2
DB:Oracle 10.2.0.1
conn L1/L1
create table Test_table(
data varchar2(30)
);
insert into Test_table values ('This table belongs to L1');
grant select on Test_table to L2;
conn L2/L2
create table Test_table (
data varchar2(30)
);
insert into Test_table values ('This table belongs to L2');
select * from Test_table;
在L2的session中,执行以下steps:
SQL> show user
USER 为 "L2"
SQL> select sys_context('USERENV','CURRENT_USER') from dual;
SYS_CONTEXT('USERENV','CURRENT_USER')
--------------------------------------------------------------------------------
L2
SQL> select * from some_table;
DATA
------------------------------
This table belongs to L2
SQL> alter session set current_schema=l1;
会话已更改。
SQL> show user
USER 为 "L2" //当前用户依然没有改变!!!
SQL> select sys_context('USERENV','CURRENT_USER') from dual;
SYS_CONTEXT('USERENV','CURRENT_USER')
--------------------------------------------------------------------------------
L2 //当前用户依然没有改变!!!
SQL> select * from some_table;
DATA
------------------------------
This table belongs to L1 //但是查询的对象却变了
第一个问题就是执行完alter session set current_schema命令后,当前session的username是不会改变的吗?那这个命令执行后是怎么读取到其他schema的对象的呢?难道在oracle中能还能出现同一个用户不同schema的情况??从资料上看好像是不可能的呀,怎么能查到当前session的schema呢,通过v$session查看到的应该是当前的用户呀,请大家帮忙分析一下。