17.05 - CHECK (boolean_condition) - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語
Last Update
2021-03-30

複合テーブル属性としてCHECKを指定する場合、制約に名前を付けるかどうかに応じて構文は異なります。

次のルールはテーブル属性のCHECK制約のみに適用されます。
  • テーブル レベルのCHECK制約は、少なくともそのテーブルの1列を参照する必要があります。
  • 指定したテーブルに対して、最大100のテーブル レベルの制約を定義できます。

テーブル属性のCHECK制約は、そのテーブルに定義されている列について、列相互に比較したり、定数と比較したりできます。

名前なしのCHECK列制約には、この構文を使用します。
     CHECK (boolean_condition)

CHECK制約は、列属性またはテーブル属性として指定できます。

サブクエリー、集約関数または順序付き分析関数をCHECK制約に含めることはできません。

CHECK制約は、識別列または揮発テーブルの列に対して指定できません。

テーブルレベル、列レベル、およびFOREIGN KEY … WITH CHECK OPTION制約を組み合わせてビューの基になっているテーブルに指定すると、INSERTリクエストとUPDATEリクエストで構文解析できないほど巨大な制約式が作成される可能性があります。
次のデータ型を持つ列に対してはCHECK制約を指定できません。
  • BLOB
  • CLOB
  • UDT
  • ARRAY/VARRAY
  • Period
  • XML
  • Geospatial
  • JSON
  • DATASET

Vantageは、文字列に対するCHECK制約を、現行セッション照合を使用して検査します。この結果、両方に対して同じデータが挿入または更新されたとしても、CHECK制約があるセッション照合に一致するものの、別の照合に一致しない場合があります。

同じブール条件と大文字/小文字を使用した、名前の付いていないCHECK制約は重複とみなされ、これを指定するとシステムはエラーを返します。

例えば、次のCREATE TABLEリクエストは、f1とF1の大文字小文字が異なるため、有効です。

    CREATE TABLE t1 (
      f1 INTEGER, CHECK (f1 > 0), CHECK (F1 > 0));

次のCREATE TABLEリクエストは、両方のf1の指定が小文字で同じであるため、無効です。

    CREATE TABLE t1 (
      f1 INTEGER, CHECK (f1 > 0), CHECK (f1 > 0));

列属性およびテーブル属性のCHECK制約の場合は、任意の単純なブール演算検索条件を指定できます。CHECK制約の定義には、subquery、集約式、または順序付き分析式を含めることができません。

CHECK制約は、次の列には指定できません。
  • 揮発テーブルの列
  • 識別列

CHECK制約の検索条件は、SET演算子を指定できません。

Vantageでは、テーブル属性CHECK制約に対して次の非ANSI SQL制約構文をサポートしています。

    BETWEEN value_1
 AND value_2

システムは、次のANSI準拠の制約であるように構文を処理します。

    CHECK (column_name
 BETWEEN value_1
 AND value_2)

揮発テーブル列、識別列、UDT列、ARRAY、VARRAY、Geospatial列、Period列、BLOB列、またはCLOB列を除き、BETWEEN … AND演算子もCHECK制約の形式として使用できます。

ドメインを構成するためのCHECK制約の使用について詳しくは、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。

正規化テーブルの場合、Vantageは入力行または新規行についてCHECK制約を検証します。

行レベル セキュリティ テーブルの行レベル セキュリティ制約列に対して、CHECK制約を定義することはできません。

行レベル セキュリティ テーブルに1つまたは複数のCHECK制約を定義した場合、その制約の実施により、そのテーブルに定義されたUDFセキュリティ ポリシーが実行されることはありません。CHECK制約の実施はテーブル全体に適用されます。したがって、CHECK制約は、ユーザーが表示できる行だけでなく、テーブル内のすべての行に適用されます。

CONSTRAINT constraint_name
列に挿入できる、または列で更新できる値を制約するために使用される、名前付き単純ブール条件式を指定します(任意指定)。名前付きのCHECK列制約には、この構文を使用します。
     CONSTRAINT  constraint_name  CHECK (boolean_condition)