A用户的过程如下:
create or replace procedure ss
as
v_ename varchar(30);
begin
select ut.ename into v_ename from emp ut where rownum=1;
dbms_output.put_line(v_ename);
end;
在A用户下执行此过程
SQL> set serveroutput on
SQL> exec ss;
SMITH
PL/SQL procedure successfully completed
用system新建一个测试用户
SQL> create user j1_test identified by oracle;
User created
赋予此用户执行存储过程ss的权限
SQL> grant execute on scott.ss to j1_test;
Grant succeeded
SQL> grant connect,resource to j1_test;
Grant succeeded
创建一个与scott用户相同名称的表
SQL> create table j1_test.emp as select * from scott.emp where 1=2;
Table created
SQL> insert into j1_test.emp select * from scott.emp where ename <>'SMITH';
13 rows inserted
SQL> commit;
Commit complete
过滤掉SMITH的数据
在测试用户下执行存储过程ss
SQL> exec scott.ss;
SMITH
PL/SQL procedure successfully completed
可以发现输出结果仍然是smith,由此可见,对于不加schema的表,别的用户都是在查询存储过程所属对象的表
create or replace procedure ss
as
v_ename varchar(30);
begin
select ut.ename into v_ename from emp ut where rownum=1;
dbms_output.put_line(v_ename);
end;
在A用户下执行此过程
SQL> set serveroutput on
SQL> exec ss;
SMITH
PL/SQL procedure successfully completed
用system新建一个测试用户
SQL> create user j1_test identified by oracle;
User created
赋予此用户执行存储过程ss的权限
SQL> grant execute on scott.ss to j1_test;
Grant succeeded
SQL> grant connect,resource to j1_test;
Grant succeeded
创建一个与scott用户相同名称的表
SQL> create table j1_test.emp as select * from scott.emp where 1=2;
Table created
SQL> insert into j1_test.emp select * from scott.emp where ename <>'SMITH';
13 rows inserted
SQL> commit;
Commit complete
过滤掉SMITH的数据
在测试用户下执行存储过程ss
SQL> exec scott.ss;
SMITH
PL/SQL procedure successfully completed
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29802484/viewspace-2087852/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29802484/viewspace-2087852/