Как использовать глобальную временную таблицу 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;