关于当前模式current_schema的切换问题

我们有时会在用户A下调用用户B下的存储过程,去用户B下的表的数据,但是这要求用户A
拥有B下相关表的权限,并且在处理表时指定好表的模式
通常的做法是在写存储过程时写出表的模式,例如:SCOTT.DEPT,但是有时存储过程没有
这样写,而又不想改程序,还有一个方法就是在调用存储过程前设置current_schema[@more@]

例如,把scott.dept的select权限授予hr用户
sqlplus scott/tiger

SQL>grant select on dept to hr;

然后用hr用户登录
sqlplus hr/hr

SQL> select count(*) from scott.dept;

  COUNT(*)
----------
         4

SQL> select count(*) from dept;
select count(*) from dept
                     *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> alter session set current_schema=scott;

Session altered.

SQL> select count(*) from dept;

  COUNT(*)
----------
         4

使用完毕后再设置回当前用户为当前模式

SQL> alter session set current_schema=hr;

查看当前用户和当前模式
SQL>select SYS_CONTEXT('USERENV','CURRENT_USER') CURRENT_USER ,
           SYS_CONTEXT('USERENV','CURRENT_SCHEMA') CURRENT_SCHEMA from dual;

CURRENT_USER              CURRENT_SCHEMA
------------------------- ------------------------------------
HR                        SCOTT

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/3898/viewspace-786807/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/3898/viewspace-786807/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值