`

Oracle Temporary Tables临时表

阅读更多

创建临时表时,ORACLE只创建了表的结构(在数据字典中定义),并没有初始化内存空间,当某一会话使用临时表时,ORALCE会从当前用户的临时表空间分配一块内存空间。也就是说只有向临时表中插入数据时,才会给临时表分配存储空间。

 

临时表分事务级临时表和会话级临时表

1事务级临时表只对当前事务有效,通过语句:ON COMMIT DELETE ROWS 语句指定。 

CREATE GLOBAL TEMPORARY TABLE report_work_area 
(
  startdate DATE, 
  enddate DATE,

  class  CHAR(20)
) ON COMMIT DELETE ROWS;

COMMITROLLBACK之前,数据一直存在,当事务提交之后,表中数据自动清除

 

2会话级临时表对当前会话有效,通过语句:ON COMMIT PRESERVE ROWS语句指定。

CREATE GLOBAL TEMPORARY TABLE report_work_area 
(
  startdate DATE, 
  enddate DATE,

  class  CHAR(20)
) ON COMMIT PRESERVE ROWS;

当我们断开连接或手动执行DELETETRUNCATE之前,临时表中的数据一直存在,并且只有当前会话可以看到,其他会话看不到。当断开会话后,表中数据自动清除。

 

 

 

 

 

 

 

 

1.   简介 

   ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据, 

   或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空, 

   但是临时表的结构以及元数据还存储在用户的数据字典中。 

   临时表只在oracle8i以及以上产品中支持。 

 

2.  详细介绍 

   Oracle临时表分为 会话级临时表 和事务级临时表。 

会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。 

事务级临时表是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。 

临时表中的数据只对当前Session有效,每个Session都有自己的临时数据,并且不能访问其它Session的临时表中的数据。因此, 

临时表不需要DML.当一个会话结束(用户正常退出 用户不正常退出 ORACLE实例崩溃)或者一个事务结束的时候,Oracle对这个会话的 

表执行 TRUNCATE 语句清空临时表数据.但不会清空其它会话临时表中的数据

你可以索引临时表和在临时表基础上建立视图.同样,建立在临时表上的索引也是临时的,也是只对当前会话或者事务有效.  

临时表可以拥有触发器

 

3.    建立临时表 

   临时表的定义对所有会话SESSION都是可见的,但是表中的数据只对当前的会话或者事务有效

   建立方法

1) ON COMMIT DELETE ROWS 定义了建立事务级临时表的方法

CREATE GLOBAL TEMPORARY TABLE admin_work_area 

        (startdate DATE, 

         enddate DATE, 

         class CHAR(20)) 

      ON COMMIT DELETE ROWS; 

EXAMPLE: 

SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area 

  2          (startdate DATE, 

  3           enddate DATE, 

  4           class CHAR(20)) 

  5        ON COMMIT DELETE ROWS; 

SQL> create table permernate( a number); 

SQL> insert into admin_work_area values(sysdate,sysdate,'temperary table'); 

SQL> insert into permernate values(1); 

SQL> commit; 

SQL> select * from admin_work_area; 

SQL> select  * from permernate; 

2)ON COMMIT PRESERVE ROWS 定义了创建会话级临时表的方法

CREATE GLOBAL TEMPORARY TABLE admin_work_area 

        (startdate DATE, 

         enddate DATE, 

         class CHAR(20)) 

     ON COMMIT PRESERVE ROWS; 

 

EXAMPLE: 

 

会话1: 

SQL> drop table admin_work_area; 

SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area 

  2          (startdate DATE, 

  3           enddate DATE, 

  4           class CHAR(20)) 

  5       ON COMMIT PRESERVE ROWS; 

SQL> insert into permernate values(2); 

SQL> insert into admin_work_area values(sysdate,sysdate,'session temperary'); 

SQL> commit; 

SQL> select * from permernate; 

 

         A 

---------- 

         1 

         2 

 

SQL> select * from admin_work_area; 

 

STARTDATE  ENDDATE    CLASS 

---------- ---------- -------------------- 

17-1?? -03 17-1?? -03 session temperary 

 

-- transaction level
CREATE GLOBAL TEMPORARY TABLE admin_work_area  
        (startdate DATE,  
         enddate DATE,  
         class CHAR(20))  
      ON COMMIT DELETE ROWS;  
create table permernate( a number);  
insert into admin_work_area values(sysdate,sysdate,'temperary table');  

insert into permernate values(1);  
select * from admin_work_area;  -- there's data
select  * from permernate;  --there's data 

commit;  

select * from admin_work_area;  -- there's NO data
select  * from permernate;  -- there's data
COMMIT;

 

 

 

会话2: 

 

SQL> select * from permernate; 

 

         A 

---------- 

         1 

         2 

 

SQL> select * from admin_work_area; 

 

未选择行

 

 

会话2看不见会话1中临时表的数据.  

 

 

会话1:

-------- session level
DROP TABLE admin_work_area  ;
CREATE GLOBAL TEMPORARY TABLE admin_work_area  
        (startdate DATE,  
         enddate DATE,  
         class CHAR(20))  
     ON COMMIT PRESERVE ROWS;  -- diff
     
INSERT INTO PERMERNATE VALUES (2);
INSERT INTO ADMIN_WORK_AREA VALUES  (SYSDATE, SYSDATE + 2, 'session temperary');
select * from admin_work_area;  -- there's data
select  * from permernate;  -- there's data
commit;  
select * from admin_work_area;  -- there's data
select  * from permernate;  -- there's data


 

会话2:

 

select * from admin_work_area;  -- there's NO data
select  * from permernate;  -- there's data
分享到:
评论

相关推荐

    Oracle存储过程中使用临时表

    会话级临时表(Session-Level Temporary Tables)只在创建它的会话内可见,并且在会话结束时自动删除。这种类型的临时表对于处理一次性数据非常有用,因为它们不会污染全局命名空间,也不会对其他用户产生影响。创建...

    主流数据库中临时表的使用

    在 DB2 中,临时表可以使用 DECLARE GLOBAL TEMPORARY TABLE 语句来定义。DB2 的临时表是基于会话的,且在会话之间是隔离的。当会话结束时,临时表的数据被删除,临时表被隐式卸下。对临时表的定义不会在 SYSCAT....

    oracle-临时表空间

    ### Oracle 临时表空间详解 #### 一、Oracle表空间概览 在Oracle数据库系统中,数据被组织成多个逻辑单元,这些单元被称为表空间。每个表空间由一个或多个物理磁盘文件(称为数据文件)组成,并且是数据库中的最高...

    oracle,sql临时表.pdf

    在Oracle数据库系统中,临时表(Temporary Tables)是一种特殊类型的表,它主要用于存储在特定会话或事务期间产生的临时数据。这些数据在会话结束或事务提交或回滚时会被自动删除,从而提供了一种高效、安全的方式来...

    Oracle中的临时表讲解

    - 查看临时表:可以使用 `SELECT * FROM user_tables WHERE TEMPORARY='Y'` 查看所有临时表,`SELECT * FROM user_tables WHERE duration='SYS$TRANSACTION'` 查看事务级临时表,`SELECT * FROM user_tables WHERE ...

    oracle,sql临时表.docx

    Oracle数据库系统支持创建临时表(Temporary Tables),这些表主要用于存储会话私有的、仅在特定事务或会话期间存在的数据。临时表的概念为用户提供了在处理大量临时数据时的高效和安全的方式,尤其是在进行复杂计算...

    OracleTemporaryTables(Oracle临时表).docx

    Oracle Temporary Tables,也称为Oracle临时表,是Oracle数据库系统中用于存储临时数据的特殊类型表。它们主要用于处理会话级别的数据,这些数据在特定会话或事务结束后会被自动清理,从而减少了对永久表的负担和...

    OracleTemporaryTables(Oracle临时表).pdf

    Oracle Temporary Tables,也称为Oracle临时表,是在Oracle数据库中用于临时存储数据的特殊表。它们主要用在处理大型数据集时提高性能,特别是在复杂的查询和存储过程中。临时表的生命周期和可见性根据创建时指定的...

    Oracle创建表空间、临时表、用户及用户授权

    在Oracle数据库管理中,表空间(Tablespaces)、临时表(Temporary Tables)、用户(Users)以及用户授权(User Authorization)是数据库管理员(DBA)进行数据库架构设计和安全管理的基础操作。以下将详细介绍这些...

    PostgreSQLOracle风格的全局临时表

    在Oracle数据库中,全局临时表(Global Temporary Tables, GTT)是一种特殊的表类型,它们允许用户在会话之间共享数据,但只在创建它们的会话生命周期内可见。这些表中的数据在会话结束时自动删除,为处理大量临时...

    oracle查看表空间表信息

    36. **TEMPORARY**: 是否临时表。 37. **SECONDARY**: 是否为辅助键表。 38. **NESTED**: 是否嵌套表。 39. **BUFFER_POOL**: 缓冲池。 40. **ROW_MOVEMENT**: 行移动。 41. **GLOBAL_STATS**: 全局统计信息。 42. *...

    数据同步时过滤掉临时表(转)

    通常,这种脚本会通过查询系统表(如`sys.tables`或`information_schema.tables`)来识别临时表,并在同步过程中跳过它们。 在自定义脚本中,我们需要考虑到临时表的特征,比如表名前缀(# 或 ##),以及它们在系统...

    Oracle创建用户、表空间、导入导出、...命令

    在Oracle数据库管理中,创建临时表空间是十分重要的步骤之一,尤其是在处理大量临时数据或排序操作时。临时表空间主要用于存储排序、索引创建和其他临时操作过程中产生的中间结果。以下是创建临时表空间的具体命令:...

    Oracle 查询用户,表,授权相关语句

    这两个视图提供了用户名、默认表空间、临时表空间等信息。例如: ```sql SELECT username, default_tablespace, temporary_tablespace FROM DBA_USERS; ``` 如果你只想查询当前用户的用户信息,可以使用`USER`...

    Oracle创建用户、表空间

    在Oracle中,可以创建永久性表空间和临时表空间。下面将详细介绍这两种类型的表空间创建方法: #### 1. 创建临时表空间 ```sql CREATE TEMPORARY TABLESPACE test_temp TEMPFILE 'E:\oracle\product\10.2.0\oradata...

    Oracle EBS 11i库表结构

    8. **临时表(Temporary Tables)**:在执行某些复杂操作或临时存储中间结果时使用,一旦操作完成,数据就会被清除。 9. **序列(Sequences)**:提供有序的整数序列,常用于生成唯一的主键值。 10. **触发器...

    Oracle 表空间查询与操作方法

    - 查询每个用户的默认表空间(`default_tablespace`)和临时表空间(`temporary_tablespace`)。 3. **查询特定段的使用情况** ```sql SELECT segment_name, bytes FROM dba_segments WHERE segment_name = 'RE_...

    Oracle数据库创建表空间、建立用户、授权、还原备份.docx

    如果系统中已经有足够的临时表空间,那么新创建的临时表空间可能并不是必需的。创建临时表空间的语法如下: ```sql CREATE TEMPORARY TABLESPACE DB_TEMP TEMPFILE 'E:\OaData\OA_TEMP.DBF' SIZE 32M AUTOEXTEND ON...

    ORACLE 导入导出表空间文档

    - `DEFAULT TABLESPACE` 和 `TEMPORARY TABLESPACE` 分别指定了用户的默认表空间和临时表空间。 #### 用户权限授予 授予用户权限是数据库管理的关键部分。权限可以细分为各种操作,如创建表、视图、索引等。权限...

Global site tag (gtag.js) - Google Analytics