Вы не можете сделать это напрямую, потому что вам нужен запрос, столбцы которого являются переменными, на основе некоторого значения. Немного отличается, что вы можете сделать, это построить динамический SQL, чтобы ваш запрос, созданный Oracle:
SETUP:
SQL> create table dataTable(q1,q2,q3) as
2 select 1,2,3 from dual union all
3 select 4,5,6 from dual
4 ;
Table created.
SQL> create table translationTable(descName, meanName) as
2 select 'q1', 'meaning1' from dual union all
3 select 'q2', 'meaning2' from dual union all
4 select 'q3', 'meaning3' from dual ;
Table created.
Это позволит создать и распечатать запрос:
SQL> declare
2 vSQL varchar2(1000);
3 begin
4 select listagg (column_name || ' AS "' || meanName || '"', ', ') within group (order by column_name)
5 into vSQL
6 from user_tab_columns col
7 inner join translationTable tr
8 on (upper(tr.descName) = col.column_name)
9 where table_name = upper('dataTable');
10 --
11 vSQL := 'select ' || vSQL || ' from dataTable';
12 dbms_output.put_line(vSQL);
13 end;
14/
select Q1 AS "meaning1", Q2 AS "meaning2", Q3 AS "meaning3" from dataTable
PL/SQL procedure successfully completed.
If вы копируете заявление и запускаете его:
SQL> select Q1 AS "meaning1", Q2 AS "meaning2", Q3 AS "meaning3" from dataTable;
meaning1 meaning2 meaning3
---------- ---------- ----------
1 2 3
4 5 6
SQL>
Таким образом, у вас есть r, но вы не можете получить его, потому что он по-прежнему имеет переменные столбцы.
Вы можете легко отредактировать этот код, чтобы он построил запрос, который возвращает строки, состоящие из конкатенации полей; таким образом у вас всегда будет одно поле, но оно отличается от того, что вы просили:
SQL> select 'meaning1, meaning2, meaning3' from dual
2 union all
3 select Q1 || ',' || Q2 || ',' || Q3 from dataTable;
'MEANING1,MEANING2,MEANING3'
--------------------------------------------------------------------------------
meaning1, meaning2, meaning3
1,2,3
4,5,6
Я не искал достаточно трудно, оправдания! Как проблема, так и ответ объясняются здесь: http://stackoverflow.com/questions/22309099/rename-columns-in-1-table-to-row-values-in-anothertable – Dendrobates