如何使用Oracle全局临时表?

时间:2013-12-20 15:18:05

标签: oracle plsql oracle11g oracle10g plsqldeveloper

我正在尝试使用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 个答案:

答案 0 :(得分:4)

除非您使用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;   

答案 1 :(得分:4)

Oracle全局临时表与您的预期略有不同。

您需要创建表并将其声明为全局临时表。

这是一个很好的资源: http://www.oracle-base.com/articles/misc/temporary-tables.php

答案 2 :(得分:4)

使用execute immediate尝试以下操作:如果表已经存在,它使用异常处理程序绕过;还要注意,你不能在PLSQL中使用SQL select

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;