Показывать имена столбцов таблицы в 1-й строке данных вывода запроса динамически в Oracle - PullRequest
0 голосов
/ 29 мая 2020

Есть одна таблица, скажем VW_RESULT как показано ниже:

ID Quarter Risk 00001 Q0 2
00001 Q1 3
00001 Q2 1
00001 Q3 1
00001 Q4 2

Теперь мне нужно показать имена столбцов в 1-й строке.

Я хочу получить такой результат:

Col1 Col2 Col3 ID Quarter Risk 00001 Q0 2
00001 Q1 3
00001 Q2 1
00001 Q3 1
00001 Q4 2

Я могу легко добиться этого, если количество столбцов фиксировано, используя UNION ALL.

Но количество столбцов будет время от времени меняться.

Я хочу сделать эту динамику c, чтобы мне не приходилось вводить имена столбцов вручную.

Я использую Oracle 11г .

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Для выполнения ваших требований весь ваш тип данных должен быть строковым, поскольку все столбцы являются строками. В случае, если какой-либо из ваших типов данных отличается от строки, это не сработает. Например: столбец идентификатора выглядит как целочисленный тип данных, если вы пытаетесь объединить строку идентификатора в столбец идентификатора в соответствии со стандартом SQL, это не удастся. Однако ниже приведено решение, если все столбцы в соответствующей таблице имеют строковый формат.

declare 

v_Sql1 varchar(1000);
v_Sql2 varchar(1000);

begin

select  (LISTAGG(chr(39)||column_name||chr(39), ',') WITHIN GROUP (ORDER BY 
column_id)) into v_Sql1 from cols where table_name = 'VW_RESULT'; 

v_Sql2:= 'select * from
(select  column_name from cols where table_name = ''VW_RESULT'') 
pivot
(
max(column_name)
for column_name in (' || v_Sql1 || '))
union select * from VW_RESULT'; 

dbms_output.put_line(v_Sql1);
dbms_output.put_line(v_Sql2);

execute immediate v_Sql2;

end;
/
0 голосов
/ 29 мая 2020

Возьмите ваши столбцы в переменную и объедините все столбцы, которые вы получаете при каждом запуске ... выполните свое с помощью execute немедленно и также объедините вашу переменную с оператором

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