zoukankan      html  css  js  c++  java
  • Oracle 学习系列之二(会话与事务级临时表和dual表 )

    一、 会话临时表

    --创建会话临时表
    create global temporary table tmp_user_session(user_id int, user_name varchar2(20),user_email varchar2(30))
    --这句表示 当事务提交时 保留数据
    on commit preserve rows

    --向临时表中插入数据
    insert into tmp_user_session(user_id,user_name,user_email) values(1,'孙业宝','948987600@qq.com')
    insert into tmp_user_session(user_id,user_name,user_email) values(1,'王丽莎','934560@qq.com')
    commit
    --查询 有数据
    select * from tmp_user_session
    --重新打开 一个sql窗口 再次查询 则无数据了 select * from tmp_user_session 说明此插入的数据 只为本窗口会话存在



    二、创建事务临时表
    --创建事务临时表
    create global temporary table tmp_users_transaction (user_id int,user_name varchar2(20),user_email varchar2(30))
    --这句表示 当事务提交时 删除数据
     on commit delete rows
     
     --向临时表中插入数据
    insert into tmp_users_transaction(user_id,user_name,user_email) values(1,'孙业宝','948987600@qq.com');
    insert into tmp_users_transaction(user_id,user_name,user_email) values(1,'王丽莎','934560@qq.com')

    --查询 有数据
    select * from tmp_users_transaction
    --提交下语句 或者回滚事务 rollback  再次查询   select * from tmp_users_transaction  就没有数据了 因为事务临时表 就是在事务提交时 就数据清空了
    commit;rollback;

    --查看临时表的表空间,其实他们的表空间为空
      select table_name, tablespace_name
        from user_tables
       where table_name = 'T_USERS'
          or table_name = 'TMP_USERS_SESSION'
          or table_name = 'TMP_USERS_TRANSACTION'

    临时表的应用场景
      1.大表分割
             众所周知,为表创建合适的索引可以在很大程度上提高数据查询的速度。但是当某个表的数据量相当大,例如数据量为亿级时,那么创建索引将会花费大量的时间,而且,查询大的索引表,与直接查询数据表相比,在性能上几乎没有任何优势,此时,一个常用的方法就是分割大表,例如:将大表分割为多个小的临时表,然后对这些小表进行相应操作,最后对所有查询结果进行综合处理。
      2.解决并行问题
             当多个进程同时对某张表进行操作时,往往会出现并行问题。
     3.作为数据缓存
        在程序段,可能需要对若干数据进行复杂运算。此时,可以创建一个临时表,并将这些数据存储在临时表中。因为可以像操作普通表一样操作临时表,这样,许多函数和sql语句都可以用来处理这些数据。

    三、特殊表 dual

    特殊表 dual 该表是每个数据库创建时默认生成的。该表仅有一列一行,在数据库开发中有着非常特殊的作用。
        1.分析dual表 执行
                    select * from dual可以看出dual 只有一行一列。
        2. dual表的应用场景
                  在oracle数据库中,dual表实际上是作为一个虚表的概念存在的。也就是说dual表存在的意义并非为了存储数据。更多的时候,dual表用来作为 from的源表。因为oracle的查询语句必须满足 select * from table name 语法格式,其中的from所指向的表是必须的,所以即使某些数据不属于任何表,也必须有一个强制的表名。dual表即可用做这个强制的虚表。
    --查看dual表结构
    select * from dual
    --查询数据当前日期
    select sysdate from dual
    --计算结果
    select 3*4-3 as results ,8-9 as plus from dual

  • 相关阅读:
    小说下载器【追书接口】
    C#调用大漠插件,发送QQ和微信消息
    C# 终本案件、综合执行人、裁判文书爬虫
    追书神器API
    一个CookieContainer的拓展类
    利用BlockingCollection实现生产者和消费者队列,实现写文本
    EF SQLite的Like语句,生成为CHARINDEX的解决办法
    ClientKey实现登录QQ空间,并设置背景音乐
    DataTable转换为Model实体对象
    开通博客第一天!
  • 原文地址:https://www.cnblogs.com/haofaner/p/4045270.html
Copyright © 2011-2022 走看看