Oracle:跨模式创建视图?

Posted

技术标签:

【中文标题】Oracle:跨模式创建视图?【英文标题】:Oracle: Creating view across schemas? 【发布时间】:2011-06-18 19:56:49 【问题描述】:

我正在尝试创建一个视图,并将问题归结为无法创建引用来自不同架构的表的视图。

例如,我可以这样做:

select count(*) from otherschema.othertable;

我可以做到:

create view foo as select count(*) as bar from oneofmytables;

但如果我尝试:

create view foo as select count(*) as bar from otherschema.othertable;

我收到“权限不足”错误。我还需要哪些额外权限?

【问题讨论】:

【参考方案1】:

您是否直接授予其他用户的表?还是通过角色?您需要直接授予权限才能创建引用另一个表的对象(视图、过程等)。作为快速测试,在 SQL*Plus 中

SQL> set role none;
SQL> select count(*) from otherschema.othertable;

如果失败,那么问题是您已通过角色获得了对表的权限。

【讨论】:

两个很好的正确答案,但我选择了这个,因为它很容易让我验证问题。谢谢!【参考方案2】:

我猜你已经通过role 而不是直接通过grant 获得了otherschema.othertable 上的选择权。

如果是这种情况,您应该使用otheruser 连接,然后使用grant select on othertable to <your-schema>

【讨论】:

如果希望从第三个模式中选择视图,请将 WITH GRANT OPTION 添加到 GRANT。【参考方案3】:

我相信您的 DBA 需要授予您权限

创建任何视图

特权。根据您站点的安全限制,他们可能会或不允许这样做。我一般不会

【讨论】:

以上是关于Oracle:跨模式创建视图?的主要内容,如果未能解决你的问题,请参考以下文章

6.4视图序列同义词--Oracle模式对象

如何获得oracle物化视图 定时刷新时 刷新所用的时间 或者是监控 物化视图在jobs中建立的job任务的执行时间

跨多个数据库创建视图

oracle 创建一个传参查询视图

oracle创建用户并分配访问指定视图的权限

Oracle 授权另外一个用户拥有创建视图的权限