oracle创建临时表的方法举例

发布时间:2020-03-27编辑:脚本学堂
本文介绍下,在oracle中创建与使用临时表的方法,通过实例学习oracle临时表的相关知识,有需要的朋友参考下。

本节内容:
oracle数据库临时表的创建方法。

1,创建权限:
oracle数据库中,创建临时表的用户,必须要有CREATE ANY TABLE。
我的理解是这样的。

2,建表的语法示例:
 

复制代码 代码示例:
-------创建虚拟表
create global temporary table  test (
ssid int,
sname varchar2(20)
) on commit delete rows;
-------插入数据
insert into test values (1,'200');
-------查询数据
select * from test
-------删除虚拟表
drop tabel test
 

在存储过程中创建临时表:
 

复制代码 代码示例:
create procduce test
is
isql varchar2(200);
dptable varchar2(100):='drop table test';
begin
isql:='create global temporary table  test (sid int,sname varchar2(20)) on commit delete rows;
execute immediate isql; --创建临时表
insert into test values (1,'abc');
execute immediate dptable; ---删除临时表
end;
 

对于oracle 临时表在存储过程中调用,我是觉得这视乎没什么意义,oracle 提供在数据库里预定义临时表,只有在调用的时候才会在临时表空间里分配空间,也就是说你可以提前在数据库里创建临时表,然后再到存储过程里直接调用临时表就行了

oracle的临时表和sql server大不一样,oracle临时表中的数据隔离做得挺好,所以你完全可以用固定的临时表来操作。当然如果你坚持不要固定表,那也可以通过动态sql在过程中创建,但是表名必须不同,否则如果另外的用户已经创建的话,就会导致创建失败。
 
3,在PL/SQL中用动态sql进行创建
 

复制代码 代码示例:
execute immediate ‘create global temporary table '|| tablename ||
'(col1 type,.......)'
 

运行存储过程的会话(session)结束后,该临时表将不复存在。
 

4,

复制代码 代码示例:
CREATE   GLOBAL   TEMPORARY   TABLE   TABLENAME   ( 
        COL1     VARCHAR2(10), 
        COL2     NUMBER 
  )   ON   COMMIT   PRESERVE(DELETE)   ROWS   ; 
 

  这种临时表不占用表空间,而且不同的SESSION之间互相看不到对方的数据,在会话结束后(或者shutdown immediate后又重新startup后)表中的数据自动清空,但表不自动删除,如果选了DELETE   ROWS,则在提交的时候即清空数据,PRESERVE则一直到会话结束,若不指定on commit选项默认为是on commit delete rows;
删除临时表与删除正常表一样,drop table cc;

5,不能将本地管理的永久表空间更改为临时表空间,字典管理的可以。
 

复制代码 代码示例:
alter tablespace temp temporary;

此时必须是temp这个表空间是字典管理才可以这样做,否则不可以;
提示错误是:ORA-03218:   CREATE/ALTER   TABLESPACE   的无效选项

6,查询表空间时,查出来的结果是所有的表空间,包含temp临时表空间,但数据文件要分开来查。
 

复制代码 代码示例:
select tablespace,status from dba_tablespace;  查询表空间
select file_name,tablespace,status from dba_data_files;查询永久数据文件;
select file_name,tablespace,status from dba_temp_files;查询临时数据文件;