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 を形成する列が NOT NULL であっても、テーブルの列は常に NULLABLE です。したがって、上記の例では、 A.1 B.2 は A および B の DDL に従って NOT NULL 列です (または、 sel 句にフィルター条件を記述して NULLS を取り除くことができます)。いずれの場合も、VT テーブルの設計は、A.1 と B.2 が NULL でないことを感知するほどインテリジェントではないため、VT でそのように保持します。

なぜそれが重要なのですか?

Not null 列を null 可能にすると、後続のクエリで VT が結合されるときに null チェックと処理のオーバーヘッドが発生するためです。したがって、「with No data」ステートメントを使用して DDL を取得し、DDL に NOT NULL を追加してから、別の CT ステートメントを発行する必要があります。

私は何かが欠けているのでしょうか、それとも「そのまま」ですか

4

1 に答える 1

3

どの列がNULL可能でないかを事前に知っている場合は、次のようにテーブル定義でそれらを指定できるはずです。

   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 に答える