2012-03-07 141 views
1

在物化視圖查詢中是否可以有公共synonims?在oracle物化視圖中使用公有同義詞

+2

你試過了嗎? :) – 2012-03-07 08:00:10

+0

是的,我做了,得到:錯誤在第1行:ORA-00980:同義詞翻譯不再有效;但如果我爲同一個用戶運行查詢,它運行良好。 – Balualways 2012-03-07 08:02:57

回答

1

讓我們試試。您顯然需要被授予正確的權限,但似乎可行。我只能猜測你的問題是你的同義詞而不是物化視圖。

create table tmp_test as 
select level as id, 'something' as blah 
    from dual 
connect by level <= 100; 

Table created. 


alter table tmp_test 
    add constraint pk_tmp_test 
     primary key (id) 
     using index; 

Table altered. 


create materialized view log on tmp_test with primary key; 

Materialized view log created. 


create or replace public synonym testing123 for tmp_test; 

Synonym created. 


create materialized view working 
refresh fast on demand 
as 
select * 
from testing123; 

Materialized view created. 


select * 
    from working 
where rownum < 11 
     ; 

     ID BLAH 
---------- --------- 
     1 something 
     2 something 
     3 something 
     4 something 
     5 something 
     6 something 
     7 something 
     8 something 
     9 something 
     10 something 

10 rows selected. 
2

「越來越:ERROR位於第1行:ORA-00980:同義詞轉換不再 有效;但如果我在同一個用戶查詢,它運行良好」

該消息意味着同義詞引用了一個不在範圍內的對象。這可能會在底層對象被刪除時發生,或者名稱拼寫錯誤。如果對象位於另一個模式中,並且所有者撤銷我們的權限,也會發生這種情況。

由於您的查詢運行正常,我們可以排除第一個原因。所以你的問題是同義詞指向對象的權限。

我認爲你的用戶已被授予通過角色的權利。這使我們能夠在查詢中使用該對象。但是,我們無法使用這些權限來構建數據庫對象 - 存儲過程,視圖和素材視圖。我們需要直接授予用戶的特權。這只是Oracle安全模型的工作方式。