2

我很想 - 我希望反对希望。但我想看看这里是否有一丝曙光....当您创建这样的 VT

create multiset volatile table VT ,  no fallback,no log as   
( sel
 A.1, B.2 from A Join B on <conditon > 
  ) 
with data Primary Index (____) on commit preserve rows ;

即使构成 VT 的列不是 NULL,表列也始终为 NULLABLE。因此,根据 A 和 B 的 DDL,上面的例如 A.1 B.2 不是 NULL 列(或者我可以在 sel 子句中编写过滤条件以清除 NULLS )。在任何一种情况下,VT 表设计都无法智能地感知 A.1 和 B.2 不是 NULL,因此请将它们保持在 VT 中。

为什么这有关系 ?

因为在后续查询中加入 VT 时,将 Not null 列设为可为空会导致空值检查和处理开销。所以我被迫使用“无数据”语句获取 DDL,并将 NOT NULL 添加到 DDL,然后发出单独的 CT 语句

我是否遗漏了什么或者那是“就是这样”

4

1 回答 1

3

如果您提前知道哪些列不可为空,那么您应该能够在表定义中指定它们,如下所示:

   create multiset volatile table VT ,  no fallback,no log 
    (Col1 NOT NULL, Col2 NOT NULL)
    as   
    ( sel
     A.1, B.2 from A Join B on <conditon > 
      ) 
    with data Primary Index (____) on commit preserve rows ;
于 2015-11-13T17:18:59.573 回答