Как динамически передавать имена столбцов в запрос? - PullRequest
2 голосов
/ 21 апреля 2020

Ниже моя проблема и желаемое решение.

Запрос1:

Select colnames from table1;

Query1 Result:
 col1
 col2
 col3
 col4

Запрос2:

Select a1.* 
  from table2 a1;

-- should translate to
select a1.col1, a1.col2, a1.col3, a1.col4 from table2 a1;

Мой первый запрос выдаст список имен столбцов, Мне нужно заменить. * На эти имена столбцов в моем втором запросе. Как мне этого добиться?

1 Ответ

2 голосов
/ 22 апреля 2020

Вы ищете динамо c SQL. Идея состоит в том, чтобы сгенерировать строку запроса из результатов запроса SQL. Затем вы можете запустить его с помощью execute immediate.

. В вашем случае это будет выглядеть так:

declare
    p_sql varchar2(100);
begin
    select 
        'select ' 
        || listagg('a1.' || colnames, ', ') within group(order by colnames)
        || ' from table2 a1'
    into p_sql
    from table1;

    dbms_output.put_line('sql: ' || p_sql);  -- debug
    execute immediate p_sql;                 -- execute
end;
/

Для ваших данных выборки: , это генерирует :

dbms_output:
sql: select a1.col1, a1.col2, a1.col3, a1.col4 from table2 a1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...