查看列注释中的SQL表列注释

时间:2014-11-03 14:46:56

标签: sql oracle sql-view

我有一个包含列注释的表,解释了每列的用途。我知道我可以通过查询all_col_comments来查看这些列注释。

但是我想基于这个表创建一个视图,我希望这个视图中的列继承原始表中的列注释。

select comm.table_name, comm.column_name, comm.comments   
from all_col_comments comm
join all_tab_cols cols on comm.table_name=cols.table_name and comm.owner=cols.owner and comm.column_name=cols.column_name
where comm.owner = :OWNER
and comm.table_name = 'PERSON'
order by comm.table_name, cols.column_id;

结果是:

TABLE_NAME  COLUMN_NAME COMMENTS
PERSON      PERS_ID     PERS_ID is the identifier of a person.
PERSON      LANG_ID     LANG_ID identifies the person's language.

现在,如果我根据此表创建视图,我必须手动添加注释。我找到的最好的方法(这是一种可怕的方式)是将其硬编码到create view语句中。必须有更好的方法。

1 个答案:

答案 0 :(得分:0)

create table person (id number, col1 varchar2(50 char));
comment on column person.id is 'it is ID';
comment on column person.col1 is 'it is COL1';

create or replace view v_person as select id from person;

您可以尝试此查询:

select ud.name view_name, 
       ud.referenced_name based_tab,
       vcols.column_name,
       nvl(vcom.comments, tcom.comments) comments
from all_dependencies ud
join all_tab_columns vcols on vcols.table_name = ud.name and vcols.owner=ud.owner
left join all_tab_columns tcols on tcols.table_name = ud.referenced_name and vcols.column_name = tcols.column_name and tcols.owner=ud.owner
left join all_col_comments tcom on ud.referenced_name = tcom.table_name and tcols.column_name = tcom.column_name and tcom.owner=ud.owner
left join all_col_comments vcom on ud.name = vcom.table_name and vcols.column_name = vcom.column_name and vcom.owner=ud.owner
where ud.name = 'V_PERSON' 
  and ud.type = 'VIEW' 
  and ud.referenced_type = 'TABLE';
  1. 使用all_dependencies查找视图所基于的表格

  2. 两次加入all_tab_columns以查找有关视图列和表列的信息(如果视图与基础表具有相同的列名,则此查询将起作用

  3. 左键加入all_col_comments两次,以查找视图和表格列评论