ITPub博客

首页 > 数据库 > Oracle > 临时表的创建与测试

临时表的创建与测试

原创 Oracle 作者:skyin_1603 时间:2016-11-11 23:03:32 0 删除 编辑

临时表,顾名思义,是临时创建并存放数据的普通表,创建之后,表结构依然存在,
但是表中的记录会根据不同级别的临时表会保留不同在不同的场景。临时表有事务级临时表:
只要会话当中有事务commit或者rollback操作,临时表中的记录就被删除。类似的,
会话级临时表就是当结束当前的会话在新会话查询时,表中的数据就被清空。

----创建临时表:

---创建事务级临时表:

suxing@PROD>create global temporary table t1(id int)

  2  on commit delete rows;

Table created.

#事务级临时表创建成功。

 

--查看表结构:

suxing@PROD>desc t1

 Name                                      Null?    Type

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

 ID                                                 NUMBER(38)

 

--插入一条数据并查询:

suxing@PROD>insert into t1 values(12);

1 row created.

 

suxing@PROD>select * from t1;

        ID

----------

        12

--插入另外一条数据:

suxing@PROD>select * from t1;

        ID

----------

        12

        13

 

--提交事务后查看表结构并查询数据:

suxing@PROD>commit;

Commit complete.

 

suxing@PROD>desc t1

 Name                                      Null?    Type

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

 ID                                                 NUMBER(38)

 

suxing@PROD>select * from t1;

no rows selected

#提交事务后,表依然还存在,只是表中的数据被清空了,

这就是事务级临时表。

--尝试使用CAST方式创建一个事务级临时表:

suxing@PROD>create global temporary table t2

  2  on commit delete rows

  3  as select * from yourtest;

Table created.

 

--查看表结构:

suxing@PROD>desc t2

 Name                                      Null?    Type

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

 ID                                                 NUMBER(3)

 NAME                                               VARCHAR2(6)

 CREATED                                            DATE

 

--查看表数据:

suxing@PROD>select * from t2;

no rows selected

#查看表中没有数据,因为使用这种方式创建表的过程中有commit操作。
 

----创建会话级临时表:

--创建会话级临时表:

suxing@PROD>create global temporary table t3(y int)

  2  on commit preserve rows;

Table created.

#临时表创建成功。

 

--查看表结构:

suxing@PROD>desc t3;

 Name                                      Null?    Type

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

 Y                                                  NUMBER(38)

 

--插入一条记录:

suxing@PROD>insert into t3 values(15);

1 row created.

 

--查看表数据:

suxing@PROD>select * from t3;

         Y

----------

        15

 

--提交事务并查看表数据:

suxing@PROD>commit;

Commit complete.

 

suxing@PROD>select * from t3;

         Y

----------

        15

#数据依然还保存着表中。

 

--关闭会话重新一个会话=登录suxing用户查看表t3的数据:

--查看表t3的表结构:

suxing@PROD>desc t3;

 Name                                      Null?    Type

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

 Y                                                  NUMBER(38)

--查看表t3的数据:

suxing@PROD>select * from t3;

no rows selected

#这样的表就是会话级临时表,当关闭当前的会话,创建新会话再次查询会话级临时表的

数据时,表中的数据已被清空,只剩下一张空表。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31392094/viewspace-2128319/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 转义字符的运用
请登录后发表评论 登录
全部评论

注册时间:2016-09-06

  • 博文量
    231
  • 访问量
    215126