2010-09-23 58 views
1

在我的程序中,我需要訪問Oracle 11g數據庫的模式。我一直試圖使用這樣的查詢來獲得表格列表:查詢Oracle數據庫時出現的問題列表:「表或視圖不存在」

SELECT t.TABLE_NAME, t.OWNER 
FROM ALL_TABLES t 
WHERE t.DROPPED = 'NO' 
ORDER BY t.TABLE_NAME 

查詢工作,我找回表的列表。不幸的是,當使用返回的表名查詢一些表時,我得到以下錯誤:

ORA-00942: table or view does not exist

什麼可能導致此錯誤?它可能是特權?

在另一個問題中,我對於是否有可能存在兩個或同名的表以及如何區分兩者有點困惑。我需要留意這個嗎?

我使用.NET中的Oracle.DataAccess提供程序連接到數據庫。這是一個遠程服務器,不幸的是我的訪問權限非常有限。

回答

4

它可能是特權。但是,這可能是由於表格處於不同的模式,並且沒有它的同義詞。如果您向所有者限定表名稱,它是否有效?即從[owner]。[table_name]中選擇呢?

+0

現在使用[owner]。[table_name]格式。謝謝! – James 2010-09-23 11:53:58

2

僅僅因爲您有權訪問ALL_TABLES視圖並不意味着您實際上可以選擇通過此視圖檢索的表。您需要在表格上選擇適當的授予選擇它們。

2個表可以具有相同的名稱,只要它們屬於不同的模式(範圍實際上比表格更廣泛,模式不能有兩個具有相同名稱的對象(表,視圖...))

0

是的,這是一個安全功能 - 如果你沒有權限從表中選擇,甲骨文將正常甚至不承認你它的存在(一個普通的用戶將無法看到ALL_在選擇的東西除非這是DBA授予的)。