2016-09-16 46 views
0

我有一個存儲過程中的select語句,我想要將其放入視圖中。 select語句從dba_tables,dba_tab_partitions和dba_tab_subpartitions中抽取。選擇語句在包裝視圖時停止工作[Oracle]

如果我自己運行語句,它工作正常。如果我在創建視圖的語句把它包:

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語句。

+1

您的用戶是否有權讀取該視圖中包含的所有表格? –

+0

是的 - 兩個用戶都可以自行運行select語句並獲得預期的結果。 – William

回答

2

這可能是由系統權限SELECT ANY DICTIONARY與角色SELECT_CATALOG_ROLE之間的差異引起的。

表面上,他們通過授予用戶對數據字典的訪問權限來做同樣的事情。它們中的任何一個都可以使用戶對像DBA_TABLES這樣的表運行查詢。

不同之處在於,在創建具有定義者權限的對象時,角色是而不是,並且視圖始終是定義者的權限。因此,爲了使視圖正常工作,用戶將需要系統特權SELECT ANY DICTIONARY或對單個對象的類似直接授權。

+0

授予選擇任何字典允許我創建視圖。謝謝! – William

0

ORA-01031:權限不足或ORA-00942:表或視圖不存在。

此錯誤表示從中創建視圖的新表沒有同義詞和創建的授權,以供創建視圖的模式訪問。