【问题标题】:Duration of data in a Global Temporary table?全局临时表中数据的持续时间?
【发布时间】:2021-03-20 09:27:35
【问题描述】:

谁能告诉我:全局临时表中的数据会存在多长时间?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    当您创建temporary table 时,您有two options 用于数据持久性:

    • ON COMMIT DELETE ROWS(默认)和
    • ON COMMIT PRESERVE ROWS

    如果您不指定持久性子句,或指定ON COMMIT DELETE ROWS,则表中的数据将是特定于事务的(将在提交或回滚时删除)。

    如果您指定ON COMMIT PRESERVE ROWS,数据将一直保留到会话结束。

    【讨论】:

    • ON COMMIT 仅适用于 DECLARE GLOBAL TEMPORAY TABLE
    • @Stavr00 好吧,DECLARE GLOBAL TEMPORARY TABLE 不是一个有效的命令,所以我不确定我是否明白你在这里想说什么。
    • 我还是不明白我的意思。
    • 我怀疑@Stavr00 的意思是强调您在创建表时必须选择一种或另一种模式(即,在 DDL 中,这是“声明”的来源),而您却没有在您的实际插入/合并语句中来回选择删除或保留。尽管您确实说过“当您创建时”,但他们可能误读了答案。
    【解决方案2】:

    如果表是使用“提交时保留行”创建的,则数据将保留到当前会话结束。如果它是使用“on commit delete rows”创建的,那么它将一直保留到下一次提交或回滚。

    【讨论】:

      【解决方案3】:

      它们可以基于 SESSION(数据在提交后仍然存在,但在断开/重新连接时不存在)。它们也可以基于 TRANSACTION(提交后数据消失)。

      这将创建一个基于事务的临时表:

      create global temporary table temp_table_transaction on commit delete rows ...
      

      这将创建一个基于会话的临时表:

      create global temporary table temp_table_transaction on commit preserve rows ...
      

      【讨论】:

        猜你喜欢
        • 2011-05-17
        • 1970-01-01
        • 2023-04-08
        • 2017-10-02
        • 2023-03-27
        • 1970-01-01
        • 2017-05-05
        • 1970-01-01
        相关资源
        最近更新 更多