Chinaunix首页 | 论坛 | 博客
  • 博客访问: 711857
  • 博文数量: 94
  • 博客积分: 1937
  • 博客等级: 上尉
  • 技术积分: 1618
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-04 18:46
个人简介

专注数据库开发管理

文章分类

全部博文(94)

文章存档

2015年(1)

2014年(2)

2013年(19)

2012年(32)

2011年(10)

2010年(30)

分类: Oracle

2012-11-09 11:41:27

在开发过程中经常要用到临时表,它的记录保存于临时表空间,
临时表分为事务级和会话级两种,语法分别如下:
1、会话级:在提交时仍保留临时表中的数据
  1. create table a(
  2.     id    int
  3. ) on commit preserve rows;
2、事务级:提交时删除临时表中所有数据,默认情况下也是事务级的
  1. create table a(
  2.     id    int
  3. ) on commit delete rows;
SESSION 1
新建一事务级的临时表:
  1. SQL> create global temporary table a(id int);

  2. Table created.

  3. SQL> insert into a values(1);

  4. row created.

  5. SQL> select * from a;

  6.         ID
  7. ----------
  8.          1
提交后再查询,临时表中的数据已被删除。
  1. SQL> commit;

  2. Commit complete.

  3. SQL> select * from a;

  4. no rows selected
下面看一下session2的场景:
SESSION 2
  1. SQL> insert into a values(1);

  2. row created.
为该临时表增加一主键,
SESSION 1
  1. SQL> alter table a add constraint pk_a primary key(id);
  2. alter table a add constraint pk_a primary key(id)
  3. *
  4. ERROR at line 1:
  5. ORA-14450: attempt to access a transactional temp table already in use
此时是不能增加主键约束的,尽管临时表没有违反约束的记录存在。
SESSION 2
  1. SQL> commit;

  2. Commit complete.
提交完成后可以创建主键,这一点与普通的物理表是不一样的。
SESSION 1
  1. SQL> alter table a add constraint pk_a primary key(id);

  2. Table altered.
SESSION 2
SQL> insert into a values(1);


  1. row created.

  2. SQL> insert into a values(1);
  3. insert into a values(1)
  4. *
  5. ERROR at line 1:
  6. ORA-00001: unique constraint (U1.PK_A) violated


-- The End --

阅读(1210) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~