Как заменить заголовки комментариями в результате запроса? - PullRequest
1 голос
/ 26 июня 2019

Я хочу запросить таблицу, имена полей которой не могут быть идентифицированы, например: akb12, ake32 ...

Но комментарии к полю имеют значение, поэтому я хочу заменить заголовки комментариями в результате запроса. И таблица слишком велика, чтобы использовать «AS» для замены.

нормальный результат:

akb12  |  ake32
value1 |  value2

что я хочу:

akb12's comment | ake32's comment
value1          |   value2        

Ответы [ 3 ]

1 голос
/ 26 июня 2019

Если комментарии уже сохранены в вашей базе данных, вы можете запросить user_col_comments. Вот пример для таблицы test с комментариями к некоторым столбцам:

create table test (a, b, c) as (
  select 1, 'B1', 'C101' from dual union all
  select 2, 'B2', 'C102' from dual );

comment on column test.a is 'Id';
comment on column test.c is 'Category name';

У нас есть таблица с тремя столбцами, два из них прокомментированы. Теперь запустите этот блок кода (вы можете изменить его на процедуру, если хотите):

declare 
  v_table varchar2(30) := 'TEST';
  v_sql varchar2(4000);
begin
  select listagg(column_name|| case when comments is not null then ' as "'||comments||'"' end,', ')
         within group (order by column_id)
    into v_sql
    from user_tab_columns 
    left join user_col_comments using (table_name, column_name)
    where table_name = v_table;
  v_sql := 'create or replace view vw_'||v_table||'_comments as select '||v_sql||' from '||v_table;
  execute immediate v_sql;
end;

Этот код создал представление vw_test_comments динамически. Вы можете запросить это:

select * from vw_test_comments;

Результат, в котором заголовки заменяются комментариями, в которых они были определены (столбцы A и C):

    Id B  Category name
------ -- -------------
     1 B1 C101
     2 B2 C102

Демоверсия dbfiddle

Если вы хотите сделать это с таблицей из другой схемы, используйте all_tab_columns, all_col_comments и добавьте owner в запрос.

0 голосов
/ 26 июня 2019

Я думаю, вы должны использовать динамический псевдоним или около того

 select  c.Name as ColumnName,
 ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rownum
 from sys.tables t 
 inner join sys.columns c on c.object_id = t.object_id 
 where t.name = 'tableName' 

с этим запросом вы получаете столбцыNames из вашей таблицы попробуйте реализовать свой запрос и, пожалуйста, дайте мне знать, если это немного поможет

так что вы должны использовать что-то вроде

 Select col1 as  (select  c.Name as ColumnName,
 ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rownum
 from sys.tables t 
 inner join sys.columns c on c.object_id = t.object_id 
 where t.name = 'tableName' and rownum = @yourrownum) + @yourvariable from table 
0 голосов
/ 26 июня 2019

Просто вы можете изменить заголовок с комментарием, выбрав имя таблицы в качестве псевдонима, например :

   Select col1 as comment1 , col2 as comment2 from table 

Настройка псевдонима в операторе выбора - простой и правильный способделает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...