【问题标题】:Teradata Volatile Table Statement is not creating any rowsTeradata 易失性表语句未创建任何行
【发布时间】:2013-06-11 07:35:38
【问题描述】:

我想在 Teradata 中创建表。因此我使用这种语法:

    CREATE VOLATILE TABLE a AS
    (
        Select * FROM ...
    ) WITH DATA PRIMARY INDEX ( ACCOUNT_ID )
;

内部 SELECT 语句产生 4 行。但是,当我运行整个查询时,结果数据集没有任何行。奇怪,我知道——这就是我写作的原因。请帮忙。谢谢。

【问题讨论】:

  • 也许您应该将 Rob 的答案标记为正确。

标签: teradata


【解决方案1】:

您需要在 DDL 中包含 ON COMMIT PRESERVE ROWS 选项以用于易失性表:

   CREATE VOLATILE TABLE a AS
    (
        Select * FROM ...
    ) WITH DATA 
    PRIMARY INDEX ( ACCOUNT_ID )
    ON COMMIT PRESERVE ROWS;

易失性(和全局临时)表的默认COMMIT 模式是DELETE 事务结束时的行。

【讨论】:

  • 亚当,尝试接受一个答案,这并不难..您有多个帖子悬而未决但仍然开放!
  • 这对我来说没有意义——如果你想保留行,为什么要首先使用 volatile 表?为什么不只是CREATE TABLE 没有VOLATILEON COMMIT PRESERVE ROWS
  • 如果您的会话使用 Teradata 模式,则 VOLATILE 表的创建本身就是一个隐式事务。因此,默认的 DELETE ROWS ON COMMIT 将导致 SELECT 语句中的数据在隐式事务结束时被删除。如果您的会话使用 ANSI 模式,则数据应保留到遇到第一个 COMMIT 语句。这在 Teradata 文档第 5 章 Teradata Database SQL 数据定义语言详细主题中进行了说明。
猜你喜欢
  • 1970-01-01
  • 2013-11-29
  • 2016-01-18
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多