我正在编写一个存储过程来自动执行任务,并且在其中一个步骤中我需要从另一个用户模式中的视图中选择数据。
我可以在存储过程外查询该视图中的数据,但显然不在我的模式下的SP中。
这是设计还是我错过了什么?有没有解决方法?
由于
答案 0 :(得分:1)
更多评论而不是答案,试图澄清问题。我相信答案可能在以下代码或Boneist的评论中。
如果您在视图上提供所需的权限,我认为没有理由认为SP不能用于从另一个模式查询视图。
例如,如果我在架构HR中创建一个视图并为我的用户提供SELECT
权限
SQL> conn hr/###@xe
Connected.
SQL> create or replace view testView as select 1 as one from dual;
View created.
SQL> grant select on testView to alek;
Grant succeeded.
然后我在我的架构中构建一个过程
SQL> conn alek/###@xe
Connected.
SQL> create or replace procedure testSelectView is
2 begin
3 for i in ( select * from hr.testView) loop
4 dbms_output.put_line(i.one);
5 end loop;
6 end;
7 /
Procedure created.
从我的架构中,查询和过程都工作:
SQL> select * from hr.testView;
ONE
----------
1
SQL> exec testSelectView;
1
PL/SQL procedure successfully completed.
答案 1 :(得分:1)
您很可能有特权问题。在PL / SQL块中,您只有直接授予您的权限,通过角色授予的权限(例如DBA
角色)不适用。
运行grant select on ... to ...;
或grant select any table to ...;
,然后就可以了。