在开发过程中经常要用到临时表,它的记录保存于临时表空间,
临时表分为事务级和会话级两种,语法分别如下:
1、会话级:在提交时仍保留临时表中的数据
-
create table a(
-
id int
-
) on commit preserve rows;
2、事务级:提交时删除临时表中所有数据,默认情况下也是事务级的
-
create table a(
-
id int
-
) on commit delete rows;
SESSION 1
新建一事务级的临时表:
-
SQL> create global temporary table a(id int);
-
-
Table created.
-
-
SQL> insert into a values(1);
-
-
1 row created.
-
-
SQL> select * from a;
-
-
ID
-
----------
-
1
提交后再查询,临时表中的数据已被删除。
-
SQL> commit;
-
-
Commit complete.
-
-
SQL> select * from a;
-
-
no rows selected
下面看一下session2的场景:
SESSION 2
-
SQL> insert into a values(1);
-
-
1 row created.
为该临时表增加一主键,
SESSION 1
-
SQL> alter table a add constraint pk_a primary key(id);
-
alter table a add constraint pk_a primary key(id)
-
*
-
ERROR at line 1:
-
ORA-14450: attempt to access a transactional temp table already in use
此时是不能增加主键约束的,尽管临时表没有违反约束的记录存在。
SESSION 2
-
SQL> commit;
-
-
Commit complete.
提交完成后可以创建主键,这一点与普通的物理表是不一样的。
SESSION 1
-
SQL> alter table a add constraint pk_a primary key(id);
-
-
Table altered.
SESSION 2
SQL
> insert into a
values(1
);
-
-
1 row created.
-
-
SQL> insert into a values(1);
-
insert into a values(1)
-
*
-
ERROR at line 1:
-
ORA-00001: unique constraint (U1.PK_A) violated
-- The End --
阅读(1258) | 评论(0) | 转发(0) |