存在我熟悉使用下面的查詢
select count(*)
from user_tab_columns
where table_name = [name of view]
and column_name = [name of column]
但是,這並不工作,如何在表或視圖中檢查是否有列名對於我試圖在v $ database中檢查的列。
是否有解決方法?
存在我熟悉使用下面的查詢
select count(*)
from user_tab_columns
where table_name = [name of view]
and column_name = [name of column]
但是,這並不工作,如何在表或視圖中檢查是否有列名對於我試圖在v $ database中檢查的列。
是否有解決方法?
v$database
實際上是由sys
(在Oracle 12籤)擁有的v_$database
視圖公共同義詞。
因此,要獲得列信息:
user_tab_columns
,因爲只考慮表/視圖當前用戶所擁有。但您感興趣的視圖歸sys
所有。v$database
。你必須使用實際的視圖名稱:v_$database
。所以,你可以使用dba_tab_columns
或all_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'
試試這個
select *
from dba_tab_columns
where table_name = 'V_%DATABASE%'
這對我的機器使用同義詞完美無缺。 Oracle版本11.2。也許這種限制是在舊版本中,並不再存在? – mathguy
@mathguy:或者相反。我在v12中測試過,如果我用'table_name ='V $ DATABASE''查詢'dba_tab_columns',我就沒有結果。你在查詢'dba_tab_columns'時看到的所有者/表名值?版本之間的視圖名稱本身是否可能更改? – sstan
嗯......好的電話。我錯了;與'V $ DATABASE'我得到0的計數;同義詞不在DBA_TAB_COLUMNS中。就像你說的那樣,我用'V_ $ DATABASE'得到正確的計數。然而,在第12版中,我測試過,並且V_ $ DATABASE對象不存在;然而,我得到適當的計數和一切與V $ DATABASE! – mathguy