zoukankan      html  css  js  c++  java
  • Oracle临时表的功能与应用

    什么是临时表,用户做一个操作查询出几百几千条数据,我们可以把数据放在内存中。当有很多用户都这样做,内存空间不足,这个时候就需要把数据保存在磁盘上。对于 oracle 就提供了一种临时表用于存放这些数据。
     
    事务级
    会话级
     
    on commit preserve rows --session 临时表
    on commit delete rows --transaction 临时表
     
    下面演示创建一个事务级别与会话级别的两个临时表
     
    SQL> conn test/test
    Connected.
    SQL> desc test; 
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ID                                                 NUMBER
     NAME                                               VARCHAR2(10)
    
    在 sys 下创建 sessione 级别的临时表
    SQL> conn / as sysdba
    Connected.
    SQL> create global temporary table session_test on commit preserve rows as select * from test.test;
    Table created.
    SQL> commit; Commit complete.

      

    on commit preserve rows 表示创建的表是 session 级别,只要用户不退出,临时表一直有效。
     
    SQL> select * from session_test;
    
            ID NAME
    ---------- ----------
             0 orcl
             1 orcl
             3 orcl
             2 orcl
    

      

    退出并重新进入,并验证表内容是否存在。

    SQL> exit
    ……

    SQL> select * from session_test; no rows selected SQL>

      

    查看 session 级别的临时表在断开连接后,重新登录查看变为空了。

    接下来创建事务级别的临时表

    SQL> create global temporary table transaction_test on commit delete rows as select * from test.test;
    
    Table created.
    

      

    on commit delete rows 表示创建的表是事务级别,这个临时表的作用范围只在一个事务内有效。

    验证事务临时表的作用范围:
    虽然是 copy 的 test.test 表,但是依然是没有数据。

    SQL> select * from transaction_test;
    
    no rows selected
    

      

    接下来添加数据到事务临时表 transaction_test

    SQL> insert into transaction_test select * from test.test; 
    
    4 rows created.
    
    SQL> select * from transaction_test;
    
            ID NAME
    ---------- ----------
             0 orcl
             1 orcl
             3 orcl
             2 orcl
    

      

    如上我们将 test.test 表的内容插入到了 transaction_test 表中,然后直接查询,能查到刚刚插入的数据。

    接下来提交,并查询。(提交相当于提交事务,也就是一个事务的结束)

    SQL> select * from transaction_test;
    
            ID NAME
    ---------- ----------
             0 orcl
             1 orcl
             3 orcl
             2 orcl
    
    SQL> commit;
    
    Commit complete.
    
    SQL> select * from transaction_test;
    
    no rows selected
    

      

    由此可见

    会话级别的临时表,只要会话不断开,临时表一直有效,会话断开后,临时表内容清空;
    事务级别的临时表,只在一个事务内有效,事务提交后,临时表内容清空。

  • 相关阅读:
    SQL 的单引号转义字符
    Oracle中row_number()、rank()、dense_rank() 的区别
    Hibernate之mappedBy与@JoinColumn
    spring定时任务的注解实现方式
    springmvc常用注解之@Controller和@RequestMapping
    out.print()与out.write()的区别
    idea 中 找不到程序包 的坑
    Thymeleaf学习
    unknow command 'iscan',使用redis desktop manager 无法读取redis存储的数据
    Struts2框架简单介绍
  • 原文地址:https://www.cnblogs.com/black-start/p/11007967.html
Copyright © 2011-2022 走看看