Oracle 临时表

临时表


Temporary Tables

1.  临时表就是为会话或者事务创建的表。对于会话级别的临时表,会话结束时候,临时表就被truncate,对于事务级别的临时表,事务提交或者回滚时候            被truncateon commit关键字用于确定是哪种临时表。

2.  创建临时表时候,只是在数据库中定义了一个永久的数据字典定义,在插入数据后才在临时表空间中分配临时段。

3.  临时表是静态的,所以可以为临时表创建索引,视图,触发器等对象。

4.  由于临时表的特征,临时表一般不支持常规表的很多特性,例如压缩,外键(无法参考其他表,也无法被其他表参考)等,所以临时表一般只能是单表存在。

1. 会话级别临时表:

会话1

HR >create global temporary table test(id date) on commit preserve rows;

Table created.

HR >insert into test values(sysdate);

HR >select table_name,TEMPORARY from user_tables where table_name='TEST';

TABLE_NAME                    |T

------------------------------|-

TEST                          |Y

HR >select dbms_metadata.get_ddl('TABLE','TEST') from dual;

DBMS_METADATA.GET_DDL('TABLE','TEST')

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

 

  CREATE GLOBAL TEMPORARY TABLE "HR"."TEST"

   (    "ID" DATE

   ) ON COMMIT PRESERVE ROWS

HR >select * from test;

ID

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

2013-06-16 12:36:03

HR >select username,sqladdr,sqlhash,blocks from v$sort_usage;

USERNAME       |SQLADDR         |   SQLHASH|    BLOCKS

---------------|----------------|----------|----------

HR             |000000006B9FA368|1029988163|       128

 

新建会话2查看:

HR >select * from test;

no rows selected

退出会话1,在会话2中查看:

HR >select username,sqladdr,sqlhash,blocks from v$sort_usage;

no rows selected

2   事务级别临时表

会话1

HR >truncate table test;

Table truncated.

HR >drop table test;   

Table dropped.

建立临时表:

HR > CREATE GLOBAL TEMPORARY TABLE "HR"."TEST"

  2     (    "ID" DATE

  3     ) ON COMMIT delete ROWS;

 临时段已经分配:

HR >select username,sqladdr,sqlhash,blocks from v$sort_usage;

 

USERNAME       |SQLADDR         |   SQLHASH|    BLOCKS

---------------|----------------|----------|----------

HR             |000000006B9FA368|1029988163|       128

插入数据

HR >insert into test values(sysdate);

1 row created.

HR >select * from test;

ID

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

2013-06-16 13:27:57

 

HR >commit;

 

Commit complete.

 

HR >select * from test;

no rows selected

3   临时表用途

1. 多表关联查询,查询表较多,可以把查询结果放在临时表,在会话过程中直接访问临时表即可,这样可以提高查询效率。当然Oracle本身就会对二次查询进行优化,所以这需要很好地理解业务逻辑,从而决定是否需要。

create global temporary table test on commit preserve rows as select a.FIRST_NAME,b.JOB_TITLE from employees a,jobs b where a.job_id=b.job_id;;

2. 强调用户会话操作的独立性。

3. 程序执行过程中可能需要存放一些临时的数据(例如出报表),这些数据在整个程序的会话过程中都需要用到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值