• 创建临时表


    关于创建全局临时表

    全局临时表的元数据对多个用户及其会话可见,但其内容是会话本地的。

    例如,假设基于 Web 的航空公司预订应用程序允许客户创建多个可选行程。每个行程都由全局临时表中的一行表示。应用程序更新行以反映行程中的变化。当客户决定她想要使用哪个行程时,应用程序将该行程的行移动到一个持久表中。

    当客户决定她想要使用哪个行程时,应用程序将该行程的行移动到一个持久表中。

    在会话期间,行程数据是私有的。在会话结束时,可选的行程将被删除。

    全局临时表的定义对所有会话可见,但全局临时表中的数据仅对向表中插入数据的会话可见。

    使用该CREATE GLOBAL TEMPORARY TABLE语句创建一个全局临时表。ON COMMIT子句指示表中的数据是特定于事务(默认)还是特定于会话,其含义如下:

    ON COMMIT 设置影响

    DELETE ROWS

    这将创建一个特定于事务的全局临时表。会话绑定到全局临时表,事务首先插入表中。绑定在事务结束时消失。每次提交后,数据库都会截断表(删除所有行)。

    PRESERVE ROWS

    这将创建一个特定于会话的全局临时表。会话绑定到全局临时表,第一次插入到会话中的表中。此绑定在会话结束时消失或通过在会话中发出TRUNCATE表而消失。当您终止会话时,数据库会截断表。

    创建全局临时表

    此语句创建特定于事务的全局临时表:

    CREATE GLOBAL TEMPORARY TABLE admin_work_area_trans
            (startdate DATE,
             enddate DATE,
             class CHAR(20))
          ON COMMIT DELETE ROWS;

    此语句创建特定于会话的全局临时表:

    CREATE GLOBAL TEMPORARY TABLE admin_work_area_session
            (startdate DATE,
             enddate DATE,
             class CHAR(20))
          ON COMMIT PRESERVE ROWS;

    可以在全局临时表上创建索引。它们也是临时的,索引中的数据与基础表中的数据具有相同的会话或事务范围。

    默认情况下,全局临时表中的行存储在创建该表的用户的默认临时表空间中。但是,在创建全局临时表时,可以使用CREATE global temporary table的tablespace子句将全局临时表分配给另一个表空间。您可以使用此功能来节省全局临时表使用的空间。例如,如果必须执行许多小型全局临时表操作,并且为排序操作配置了默认临时表空间,因此使用了较大的数据块大小,那么这些小型操作将消耗大量不必要的磁盘空间。在这种情况下,最好分配一个具有较小扩展数据块大小的第二个临时表空间。

    以下两个语句创建一个扩展大小为64 KB的临时表空间,然后在该表空间中创建一个新的全局临时表。

    CREATE TEMPORARY TABLESPACE tbs_t1 
        TEMPFILE 'tbs_t1.f' SIZE 50m REUSE AUTOEXTEND ON
        MAXSIZE UNLIMITED
        EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K;
    
    CREATE GLOBAL TEMPORARY TABLE admin_work_area
            (startdate DATE,
             enddate DATE,
             class CHAR(20))
          ON COMMIT DELETE ROWS
          TABLESPACE tbs_t1;

    注意:根据初始化参数private_temp_table_prefix,私有临时表的名称必须加前缀。

    Creating a Private Temporary Table

    此语句创建特定于事务的专用临时表:

    CREATE PRIVATE TEMPORARY TABLE ORA$PTT_sales_ptt_transaction
        (time_id      DATE,
         amount_sold  NUMBER(10,2))
       ON COMMIT DROP DEFINITION;

    此语句创建会话特定的专用临时表:

    CREATE PRIVATE TEMPORARY TABLE ORA$PTT_sales_ptt_session
        (time_id      DATE,
         amount_sold  NUMBER(10,2))
       ON COMMIT PRESERVE DEFINITION;

    默认情况下,私有临时表中的行存储在创建该表的用户的默认临时表空间中。但是,在创建临时表的过程中,可以使用CREATE private temporary table语句的tablespace子句将专用临时表分配给另一个临时表空间。

    并行化表创建

    当您指定AS SELECT子句来创建一个表并使用另一个表中的数据填充它时,您可以使用并行执行。

    略。。。。

  • 相关阅读:
    剑指Offer 07 重建二叉树
    剑指Offer 06 从尾到头打印链表
    剑指Offer 05 替换空格
    剑指Offer 04 二维数组中的查找
    剑指Offer 03 数组中重复的数字
    leetcode518
    leetcode474
    leetcode376
    leetcode646
    leetcode213
  • 原文地址:https://www.cnblogs.com/wonchaofan/p/16755209.html
Copyright © 2020-2023  润新知