Как использовать глобальную временную таблицу Oracle?

Я пытаюсь использовать глобальную временную таблицу Oracle без физического создания таблицы в базе данных. Следующий код не работает. Может кто-нибудь объяснить, как правильно использовать глобальные временные таблицы?

declare
  global temporary table my_temp_table(column1 number) on commit preserve rows;    
begin
  insert into my_temp_table (column1) values (1);
  select * from my_temp_table;   
end;

3 ответа

Решение

Попробуйте выполнить нижеприведенное, используя execute немедленный: он использует обработчик исключений для обхода, если таблица уже существует; также обратите внимание, что вы не можете использовать SQL select внутри PLSQL

DECLARE
  l_column1 number;
begin
  begin
    execute immediate 'create global temporary table my_temp_table(column1 number) 
on commit   preserve rows';
  exception when others
    then
    dbms_output.put_line(sqlerrm);
  end;
  insert into my_temp_table (column1) values (1);
  select * into l_column1 from my_temp_table where column1=1;
  dbms_output.put_line('the temp value is '||l_column1);   
end;

Глобальные временные таблицы Oracle немного отличаются от того, что вы могли ожидать.

Вам необходимо создать таблицу и объявить ее как глобальную временную таблицу.

Вот хороший ресурс: http://www.oracle-base.com/articles/misc/temporary-tables.php

Если вы не используете EXECUTE IMMEDIATE, вы не сможете создать таблицу внутри PL/SQL. Попробуй это:

create global temporary table my_temp_table(column1 number) on commit preserve rows;    

insert into my_temp_table (column1) values (1);
select * from my_temp_table;   
Другие вопросы по тегам