• DB2——临时表


    一、临时表

        临时表(TEMPORARY TABLE)通常应用在需要定义临时集合的场合。但是,在大部分需要临时集合的时候,我们根本就不需要定义临时表。当我们在一条SQL语句中只使用一次临时集合时,我们可以使用嵌套表表达式来定义临时集合;当我们在一条SQL语句中需要多次使用同一临时集合时,我们可以使用公共表表达式;只有当我们在一个工作单元中的多条SQL语句中使用同一临时集合时,我们才需要定义临时表。

       可以通过以下三种方式定义临时表:

        方法1:  
        DECLARE GLOBAL TEMPORARY TABLE SESSION.EMP  
        (  
            NAME VARCHAR(10),---姓名  
            DEPT SMALLINT,---部门  
            SALARY DEC(7,2)---工资  
        )  
        ON COMMIT DELETE ROWS;  
           
        方法2:  
        DECLARE GLOBAL TEMPORARY TABLE session.emp  
        LIKE staff INCLUDING COLUMN DEFAULTS  
        WITH REPLACE  
        ON COMMIT PRESERVE ROWS;  
           
        方法3:  
        DECLARE GLOBAL TEMPORARY TABLE session.emp AS  
        (  
            SELECT * FROM staff WHERE <condition>  
        )  
        DEFINITION ONLY  
        WITH REPLACE;  
    
     

    二、全局声明式临时表

    ON COMMIT PRESERVE ROWS定义声明式全局临时表 定义声明式全局临时表的每个会话拥有自己的独特的临时表描述。当会话终止时,表行和临时表描述均会被删除。 有如下选项,可控制commit后临时表的状态:

    ON COMMIT DELETE ROWS:在执行 COMMIT 操作时,如果表上没有打开 WITH HOLD 游标,就删除表中的所有行。这是默认设置。

    ON COMMIT PRESERVE ROWS:在执行 COMMIT语句指定所创建的临时表是会话级临时表,当我们断开连接或手动执行DELETE或TRUNCATE之前,临时表中的数据一直存在,并且只有当前会话可以看到,其他会话看不到。

    ON ROLLBACK DELETE ROWS:在执行 ROLLBACK(或 ROLLBACK to SAVEPOINT)操作时,语句指定所创建的临时表是事务级临时表,当COMMIT或ROLLBACK之前,这些数据一直存在,当事务提交之后,表中数据自动清除。这是默认设置。

    ON ROLLBACK PRESERVE ROWS:在执行 ROLLBACK(或 ROLLBACK to SAVEPOINT)操作时,保留表中的所有行。

    delete rows用于事务相关,也就在事务结束后truncate data in the temporary table

    with replace 指在程序结束后自动删除该临时表

    as 指字段从另外一个表来的意思

    definition only 指创建表的时候不同时进行数据插入。关键字就是指“只定义无数据"只创建表

    1.在建表语句中使用NOT LOGGED INITIALLY,只是在建表事务中不记日记,并不能关闭这张表的日志。
    2.如果需要不记录事务日志,需要在每个事务的开头使用 db2 alter table  dbname activate NOT LOGGED INITIALLY 然后做commit.
    这里的不记日志操作,仅仅在同一个事务内有效,也就是说,这个事务结束(发出了commit命令)之后,后续操作会重新记录日志
    3.可以使用NOT LOGGED INITIALLY 做清空表的操作。
      用法:
          alter  table nolog_tab activate not logged initially with empty table
          commit

    preserve rows表示在会话结束后清除临时表的数据
    前者在事务提交后数据就已经清除了.
    后者在会话中止时或者导常退出时数据都会被清除掉



        定义了临时表后,我们可以像使用普通表一样使用临时表。临时表只对定义它的用户有效,不同用户可以在同一时间定义同名的临时表,他们之间互不影响。临时表的生命周期是SESSION,当SESSION关闭时,临时表将自动删除,这也是临时表的模式名只能为SESSION的原因。此外,我们还可以给临时表定义索引。更多细节请参考DB2 信息中心。

    ----更多参见:DB2 SQL 精萃

  • 相关阅读:
    集合异常原因与处理方式
    List的子类特点
    数据结构:数据的组织方式
    java对多态的了解
    JAVA电话本系统
    字符串转换数组
    登录用户名密码是否合法
    十三 spark 集群测试与基本命令
    十二 flume与kafka数据传输
    十一 spark- Standalone 集群
  • 原文地址:https://www.cnblogs.com/wy20110919/p/9299534.html
Copyright © 2020-2023  润新知