我熟悉如何使用以下查询检查表或视图中的列名
select count(*)
from user_tab_columns
where table_name = [name of view]
and column_name = [name of column]
但是,这对于我要在v $ database中检查的列不起作用。
有解决方法吗?
答案 0 :(得分:2)
v$database
实际上是v_$database
拥有的sys
视图的公共同义词(在Oracle 12中检查过)。
所以要获取列信息:
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'
答案 1 :(得分:0)
试试这个
select *
from dba_tab_columns
where table_name = 'V_%DATABASE%'