Передача DataTable в процедуру Oracle - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу передать DataTable в процедуру Oracle, которая создает временную таблицу. Даже Моя процедура нуждается в изменениях, чтобы принять datatable в качестве параметра. Я хочу, чтобы datatable вместо существующей_таблицы.

Ниже приведена процедура:

CREATE OR REPLACE procedure temptable
is
begin
EXECUTE IMMEDIATE'CREATE GLOBAL TEMPORARY TABLE TEMP_TABLE 
ON COMMIT PRESERVE ROWS
AS
select * from existing_table';
End;

Как мне работать через это. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 05 ноября 2018

Вот пример того, как вы можете это сделать:

SQL> create or replace procedure temptable (par_table_name in varchar2)
  2  is
  3    l_cnt number;
  4    l_str varchar2(200);
  5  begin
  6    -- if TEMP_TABLE already exists, drop it
  7    select count(*)
  8      into l_cnt
  9      from user_tables
 10      where table_name = 'TEMP_TABLE';
 11
 12    if l_cnt > 0 then
 13       execute immediate 'drop table temp_table';
 14    end if;
 15
 16    -- create a new TEMP_TABLE
 17    l_str := 'create global temporary table temp_table on commit preserve rows ' ||
 18             'as select * from ' || par_table_name;
 19    execute immediate (l_str);
 20  end;
 21  /

Procedure created.

SQL> exec temptable('dept');

PL/SQL procedure successfully completed.

SQL> select * from temp_table;

    DEPTNO DNAME                LOC
---------- -------------------- --------------------
        10 ACCOUNTING           NEW YORK
        20 RESEARCH             DALLAS
        30 SALES                CHICAGO
        40 OPERATIONS           BOSTON

SQL>

Однако , в Oracle вы на самом деле не создаете / удаляете таблицы динамически - вы создаете их один раз и используете их много раз. Для глобальной временной таблицы вы должны создать ее один раз и при необходимости заполнить в разных сеансах.

Могут быть такие же требования, как и у вас (т.е. использовать одно и то же имя таблицы для разных источников данных), поэтому - если это ваш случай, посмотрите, поможет ли приведенный выше код.

...