我在存储过程中有一个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语句。
答案 0 :(得分:2)
这可能是由系统权限SELECT ANY DICTIONARY
和角色SELECT_CATALOG_ROLE
之间的差异引起的。
从表面上看,他们通过授予用户访问数据字典的权限来做同样的事情。其中任何一个都可以使用户对DBA_TABLES
等表格运行查询。
不同之处在于,在创建具有定义权限的对象时,角色不,并且视图始终是定义权限。因此,要使视图工作,用户将需要系统特权SELECT ANY DICTIONARY
,或者对单个对象的类似直接授权。
答案 1 :(得分:0)
ORA-01031:权限不足或ORA-00942:表或视图不存在。
此错误表示创建视图的新表没有创建同义词和授权,以供创建视图的模式访问。