2016-09-23 16 views
0

存在我熟悉使用下面的查詢

select count(*) 
from user_tab_columns 
where table_name = [name of view] 
and column_name = [name of column] 

但是,這並不工作,如何在表或視圖中檢查是否有列名對於我試圖在v $ database中檢查的列。

是否有解決方法?

回答

2

v$database實際上是由sys(在Oracle 12籤)擁有的v_$database視圖公共同義詞。

因此,要獲得列信息:

  1. 不能使用user_tab_columns,因爲只考慮表/視圖當前用戶所擁有。但您感興趣的視圖歸sys所有。
  2. 不能使用同義詞名稱v$database。你必須使用實際的視圖名稱:v_$database

所以,你可以使用dba_tab_columnsall_tab_columns像這樣:

select count(*) 
from dba_tab_columns 
where table_name = 'V_$DATABASE' 
and column_name = [name of column] 

編輯

另一種方式,是在實際的視圖名稱更少依賴於sys,我猜可能Oracle數據庫版本之間的更改,將加入dba_synonyms

select count(*) 
    from dba_synonyms s 
    join dba_tab_columns c 
    on c.owner = s.table_owner 
    and c.table_name = s.table_name 
    and c.column_name = [column name] 
where s.owner = 'PUBLIC' 
    and s.synonym_name = 'V$DATABASE' 
+0

這對我的機器使用同義詞完美無缺。 Oracle版本11.2。也許這種限制是在舊版本中,並不再存在? – mathguy

+0

@mathguy:或者相反。我在v12中測試過,如果我用'table_name ='V $ DATABASE''查詢'dba_tab_columns',我就沒有結果。你在查詢'dba_tab_columns'時看到的所有者/表名值?版本之間的視圖名稱本身是否可能更改? – sstan

+0

嗯......好的電話。我錯了;與'V $ DATABASE'我得到0的計數;同義詞不在DBA_TAB_COLUMNS中。就像你說的那樣,我用'V_ $ DATABASE'得到正確的計數。然而,在第12版中,我測試過,並且V_ $ DATABASE對象不存在;然而,我得到適當的計數和一切與V $ DATABASE! – mathguy

0

試試這個

select * 
from dba_tab_columns 
where table_name = 'V_%DATABASE%'