检查Oracle中v $ database中是否存在列

时间:2016-09-23 00:06:33

标签: sql oracle

我熟悉如何使用以下查询检查表或视图中的列名

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

但是,这对于我要在v $ database中检查的列不起作用。

有解决方法吗?

2 个答案:

答案 0 :(得分:2)

v$database实际上是v_$database拥有的sys视图的公共同义词(在Oracle 12中检查过)。

所以要获取列信息:

  1. 您不能使用user_tab_columns,因为它只考虑当前用户拥有的表/视图。但您感兴趣的观点归sys所有。
  2. 您无法使用同义词名称v$database。您必须使用实际的视图名称:v_$database
  3. 因此您可以使用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'
    

答案 1 :(得分:0)

试试这个

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