17.10 - 使用上の注意 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - データベース ユーティリティ

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
構成
Publication ID
B035-1102-171K-JPN
Language
日本語 (日本)

CHECKコマンドでワイルドカード構文を使用するときには、次のルールが適用されます。特に注記されない限り、例に示されているデータベースおよびテーブルがシステムに存在するとします。

ルール
ワイルドカード構文では、次の有効なASCII文字を指定できます。
  • A … Z
  • a … z
  • 0 … 9
  • _ (下線記号)
  • $ (ドル記号)
  • # (ナンバー記号)

名前の最初の文字を記述するために、数字(0 … 9)をワイルドカードとして使用することはできません。

例1: 次に示すのは有効なコマンドです。
CHECK db1.t[#af_2r]1 AT LEVEL ONE;

例2:次に示すのは有効なコマンドではありません。

CHECK db[#,kA-d159]xy AT LEVEL ONE;

上記のコマンドは、データベース名に指定したワイルドカードに無効なカンマ(,)が含まれているため、構文エラーになります。構文エラー メッセージの詳細については、構文エラーのメッセージを参照してください。

ワイルドカード文字は角括弧内に指定する必要があります。ワイルドカード構文は、左角括弧[で開始し、右角括弧]で終了します。 例1:データベースdb1、db2、db3、db4、およびdb5が存在し、db1とdb5のテーブルだけをチェックするとします。次のように入力します。
CHECK db[15] AT LEVEL ONE;

CheckTableは、データベースdb1とdb5のすべてのテーブルをレベル1でチェックします。このワイルドカード構文では、データベース名の3番目の文字に、2つの使用可能値(1および5)を定義しています。

例2:データベースdb1、dc1、dd1などが存在し、各データベースには表T1、T2、T3などが含まれるものとします。名前の任意の位置にワイルドカード構文を使用し、次のように入力します。

CHECK d[bd]1.t[123] AT LEVEL ONE;

CheckTableは、データベースdb1およびdd1のテーブルt1、t2、t3をチェックします。

例3: 名前の複数の位置にワイルドカード構文を指定するには、次のように入力します。

CHECK db[12][pq] AT LEVEL TWO;

CheckTableは、データベースdb1p、db2p、db1q、およびdb2qをレベル2でチェックします。ワイルドカード構文は、データベース名の3番目と4番目の文字に可能値を定義しています。

ワイルドカード構文の中では特殊文字%と?を指定できません。ただし、特殊文字%および?を、有効な任意のワイルドカード構文と併せて使用することは可能です。 例1:データベースdba1、dba2、db11およびdb12が存在し、データベースdba1、dba2、db11、およびdb12をチェックするとします。次のように入力します。
CHECK db[a1]? at level one;

このコマンドは、'?'がワイルドカード構文の外側にあるため、有効です。

例2:次のものは、ワイルドカード構文では'?'が認められていないため、有効なコマンドではありません。

CHECK db[a1?] at level one;
ワイルドカード構文を使用して、チェックするデータベースおよびテーブルの名前かリストと、チェックしないデータベースかテーブルのリストを指定できます。 例1:データベースdb1、db2、db3およびdb4が存在し、次のように入力するとします。
CHECK db% exclude db[34] at level one;

データベースdb1とdb2がチェックされます。

例2: データベースdb1、db2、db3およびdb4が存在し、これらのデータベースにはすべて、テーブルt1、t2、t3およびt4があるとします。次のように入力します。

CHECK db[23] exclude t[14] at level one;

CheckTableは、データベースdb2およびdb3のテーブルt2とt3をチェックします。

2つの文字をハイフン(-)で区切ることにより文字の範囲を指定するときに、ワイルドカード構文を使用できます。例えば、ハイフンで区切られたCとJ (C-J)は、CとJを含め、辞書的にその間にあるすべての文字を表わします。
  • この2つの文字のタイプは同じでなければなりません。大文字、小文字、または数字です。
  • 2つの文字は、昇順でも降順でもかまいません。例えば、[A-D]と[D-A]では、共に同じ範囲の文字を指定します(つまり、AからDまでが含まれます)。
例1:
CHECK db1.t[1-35] AT LEVEL ONE;

CheckTableは、データベースdb1のt1、t2、t3、およびt5テーブルをレベル1でチェックします。1-3は範囲と見なされ、5は別の値となります。

例2:

CHECK db[a-5] AT LEVEL ONE;

チェックは行なわれません。CheckTableは、dbnameに指定した範囲が無効なので、構文エラーをレポートします。構文エラー メッセージの詳細については、構文エラーのメッセージを参照してください。

ワイルドカード構文には、システム内のオブジェクト名と一致しないと思われる文字を含められます。

構文に含まれる文字の一部が、システムのオブジェクト名で指定された位置と一致しない場合、CheckTableは指定したワイルドカードと合致する名前を持つすべてのオブジェクトをチェック(またはチェックから除外)します。CheckTableは、文字列に一致するオブジェクトがない場合は無視します。これはワイルドカードの数に関係なく当てはまります。

例1: システムに、データベースdb1とdb5だけが存在し、db2、db3、などが存在しないとします。 次のように入力します。
CHECK db[125] AT LEVEL ONE;

CheckTableは、データベースdb1とdb5のすべてのテーブルをレベル1でチェックします。データベースdb2が存在しないので、CheckTableはワイルドカード構文の文字2を無視します。

例2: システムに、データベースdb1が存在しますが、db2、db3、またはdb4が存在しないとします。次のように入力します。

CHECK db[1-4] AT LEVEL ONE;

CheckTableは、データベースdb1のすべてのテーブルをチェックし、残りのワイルドカード文字を無視します。

ワイルドカード構文で同じ文字を繰り返し使用しても問題ありません。構文の中で同じ位置の同じ文字を繰り返す場合、CheckTableは最初のものを認識し、繰り返されたインスタンスは無視します。 例1:次のコマンドでは、文字bが同じ位置で繰り返されています。
CHECK d[abb]1 AT LEVEL ONE;

CheckTableは、データベースda1およびdb1内のすべてのテーブルをレベル1でチェックし、文字bの2番目のインスタンスを無視します。警告は表示されません。

例2: 次のコマンドではワイルドカードは1文字なので、文字3はハイフン範囲1-5の一部として指定されているとシステムは理解します。

CHECK db[1-53] AT LEVEL ONE;

CheckTableは、データベースdb1、db2、db3、db4、およびdb5のテーブルをレベル1でチェックします。CheckTableは、繰り返された文字3を無視します。

ワイルドカード構文は、単一引用符または二重引用符で囲まれていると、適用されません。 次のコマンドでは、文字pが二重引用符で囲まれたワイルドカードです。
CHECK db1."[p]" AT LEVEL ONE;

CheckTableは角括弧を無視し、表"[p]"がデータベースdb1に存在している場合には、そのテーブルだけをチェックします。表"[p]"がdb1に存在していない場合、警告が表示されます。