2012-03-09 61 views
2

all_tables怎麼不顯示實際包含所有表的列表?可以做select * from blah;desc blah。 但是這樣做select * from all_tables where lower(table_name) = 'blah';返回0行。Oracle - all_tables不完整?

blah不是同義詞或視圖,而是表格。

是否需要運行特定的統計信息命令,以便我的用戶可以查詢的所有表都出現在all_tables

+0

您的用戶是否擁有DBA權限? – 2012-03-09 11:59:02

+9

我不相信你。如果你有一個名爲BLAH的表,並且你有權限,'select * from all_tables where lower(table_name)='blah';'將返回一行。所以你的代碼中的某處你犯了一個錯誤。請檢查它。 – APC 2012-03-09 12:03:46

+4

'等等'可能是一個視圖或同義詞。 – Glenn 2012-03-09 12:13:14

回答

1

您可以嘗試以下語句以查看發生了什麼。

select owner, object_name, object_type 
    from all_objects 
    where object_name = 'BLAH' 
union 
select o.owner, o.object_name, o.object_type 
    from all_synonyms s, all_objects o 
    where synonym_name like 'BLAH' 
     and o.owner = s.table_owner 
     and o.object_name = s.table_name; 

我在我的系統上運行這個輸出(名稱改爲保護貧困)。

OWNER OBJECT_NAME OBJECT_TYPE 
------- -------------- ----------- 
PROD T_BLAH   TABLE 
PUBLIC BLAH   SYNONYM 

HTH。