Создание временной таблицы без знания столбцов в Oracle - PullRequest
0 голосов
/ 14 марта 2019

Как создать временную таблицу в oracle, не зная количества и названия столбцов.

Например:

Select columnA,columnB,* into temp_table from tableA.

Здесь tableA не может быть простым именем таблицы, но может быть получено из многих запросов.

Как этого достичь? Есть ли альтернатива этому?

Ответы [ 3 ]

1 голос
/ 14 марта 2019

Этот оператор создает temp_table, который содержит все столбцы и данные из tableA и два других пустых столбца, varchar и числовой.

create table temp_table as 
  select cast (null as varchar2(10)) columnA, 
         cast (null as number(6)) columnB, 
         tableA.* 
    from tableA

Если вам нужна только структура, без данных, то добавьте:

    where 1 = 0
1 голос
/ 14 марта 2019

В Oracle вы должны сначала создать таблицу, а затем вставить в нее. Или создайте его напрямую (как в моем примере).

Обратите внимание, что я создал "нормальную" таблицу; если бы это было временное , вы могли бы выбрать между global или private (в зависимости от используемой версии базы данных).

Для этого обсуждения, я думаю, это просто прекрасно:

SQL> create table temp_table as
  2    select a.*
  3    from (select d.deptno, d.dname, e.ename    --> this SELECT is your "tableA"
  4          from emp e join dept d
  5          on e.deptno = d.deptno
  6          where job = 'CLERK'
  7         ) a;

Table created.

SQL> select * from temp_table;

    DEPTNO DNAME                ENAME
---------- -------------------- ----------
        10 ACCOUNTING           MILLER
        20 RESEARCH             SMITH
        20 RESEARCH             ADAMS
        30 SALES                JAMES

SQL>

Либо создайте представление и работайте с ним:

SQL> create or replace view v_temp as
  2          select d.deptno, d.dname, e.ename
  3          from emp e join dept d
  4          on e.deptno = d.deptno
  5          where job = 'CLERK'
  6  ;

View created.

SQL> select * from v_temp;

    DEPTNO DNAME                ENAME
---------- -------------------- ----------
        10 ACCOUNTING           MILLER
        20 RESEARCH             SMITH
        20 RESEARCH             ADAMS
        30 SALES                JAMES

SQL>
0 голосов
/ 14 марта 2019

Я не уверен, почему вы хотите иметь временную таблицу, поскольку вы не знаете столбцы, но вы можете подумать о динамическом SQL для создания таблицы в зависимости от столбцов, требуемых во время вашего процесса, а затем снова ее отбросить.С моей точки зрения, я думаю, что это не очень хороший дизайн.

Я могу предложить подумать об использовании коллекции с числом столбцов 'x' с типом данных как VARCHAR2.Во время транзакции вы можете заполнять и обрабатывать в соответствии с вашими потребностями, и он также останется для этого сеанса.

...