我有一个包含列注释的表,解释了每列的用途。我知道我可以通过查询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语句中。必须有更好的方法。
答案 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';
使用all_dependencies
查找视图所基于的表格
两次加入all_tab_columns
以查找有关视图列和表列的信息(如果视图与基础表具有相同的列名,则此查询将起作用)
左键加入all_col_comments
两次,以查找视图和表格列评论