在视图中包装时,Select语句停止工作[Oracle]

时间:2016-09-16 21:40:17

标签: oracle

我在存储过程中有一个select语句,我想将其拉出并放入视图中。 select语句来自dba_tables,dba_tab_partitions和dba_tab_subpartitions。

如果我自己运行语句,它可以正常工作。如果我将它包装在create view语句中:

CREATE OR REPLACE VIEW "MYSCHEMA"."V_XWMS_TEST"
(
"OWNER"
,"SEGMENT_NAME"
,"PARTITION_NAME"
,"SEGMENT_TYPE"
,"TABLESPACE_NAME"
)
AS
SELECT "OWNER"
,"SEGMENT_NAME"
,"PARTITION_NAME"
,"SEGMENT_TYPE"
,"TABLESPACE_NAME"
FROM
[Original query]

然后根据我登录的用户,我得到ORA-01031:权限不足或ORA-00942:表或视图不存在。同样,对于这两个用户,我可以创建视图,我可以运行这个select语句,但是我无法在创建视图的上下文中运行select语句。

2 个答案:

答案 0 :(得分:2)

这可能是由系统权限SELECT ANY DICTIONARY和角色SELECT_CATALOG_ROLE之间的差异引起的。

从表面上看,他们通过授予用户访问数据字典的权限来做同样的事情。其中任何一个都可以使用户对DBA_TABLES等表格运行查询。

不同之处在于,在创建具有定义权限的对象时,角色,并且视图始终是定义权限。因此,要使视图工作,用户将需要系统特权SELECT ANY DICTIONARY,或者对单个对象的类似直接授权。

答案 1 :(得分:0)

ORA-01031:权限不足或ORA-00942:表或视图不存在。

此错误表示创建视图的新表没有创建同义词和授权,以供创建视图的模式访问。