美文网首页oracle
临时表的合理运用

临时表的合理运用

作者: 牛A和牛C之间的人 | 来源:发表于2019-01-24 16:18 被阅读0次

    oracle 可以创建两种临时表

    1. 会话持有的临时表

    CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> )

      ON COMMIT PRESERVE ROWS;

    2. 事务持有的临时表

    CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> )

      ON COMMIT DELETE ROWS;

    临时表只是保存当前会话(session)用到的数据,数据只在事务或会话期间存在。 

    通过CREATE GLOBAL TEMPORARY TABLE命令创建一个临时表,对于事务类型的临时表, 

    数据只是在事务期间存在,对于会话类型的临时表,数据在会话期间存在,会话的数据对于当前会话私有。每个会话只能看到并修改自己的数据。DML锁不会加到 临时表的数据上。下面的语句控制行的存在性。 

    ● ON COMMIT DELETE ROWS 表名行只是在事务期间可见 

    ● ON COMMIT PRESERVE ROWS 表名行在整个会话期间可见 

    通俗的讲,就是事务持有的临时表当commit 事务结束,就自动清除数据,但对于会话持有的临时表,commit并不影响查询临时表,唯有当前会话结束,才清除临时表数据,其他会话中也查询不到当前会话临时表数据

    3. Oracle sql 用with 临时表 as (子查询)建立临时表进行操作

    insert into HW_RATE

        (ID,

        SUB_TYPE,

        DISTRICT_CODE,

        REGION_CODE,

        SUB_AREA_CODE,

        CREATE_DATE,

        CREATE_USER)

        with areaInfo as  //这里直接with 临时表别名.子句查询结果别名,即可

        (select o.district_code bu, o.region_code re

          from eis_user.org_office o

          where o.sub_area_code = '60487'

            and o.status = 1

            and o.year = extract(year from sysdate)

            and o.sub_type = 2)

        select sys_guid(),

              2,

              areaInfo.bu,

              areaInfo.re,

              '60487',

              sysdate,

              'ww00068'

          from areaInfo

    相关文章

      网友评论

        本文标题:临时表的合理运用

        本文链接:https://www.haomeiwen.com/subject/zaqujqtx.html