DELETE FROM ステートメント

DELETE FROM ステートメントは、検索条件に基づいて、外部データベースの表から行を削除します。

構文

WHERE 文節式が TRUE に評価されるすべての行は、TableReference によって識別される表から削除されます。

個々の行が順番に検査され、変数は現在行を指すように設定されます。 通常、WHERE 文節式はこの変数を使用して列値にアクセスするので、その内容に従って行が保存されたり削除されたりします。 変数は CorrelationName によって参照されるか、または AS 文節がない場合は TableName によって参照されます。

表参照

表参照は、メッセージ・ツリーの参照に使用される特殊なフィールド参照です。 先頭は常に "Database" という語になり、以下のいずれかが含まれる可能性があります。
  • 表名のみ
  • スキーマ名と表名
  • データ・ソース名 (つまり、データベース・インスタンスの名前)、スキーマ名、および表名
いずれの場合も、名前は直接指定するか、または式を中括弧 ({...}) で囲んで指定できます。直接指定したデータ・ソース、スキーマ、または表の名前は、名前置換の対象になります。つまり、使用している名前が既知の名前になるよう宣言されている場合、名前自体ではなく宣言済みの名前の値が使用されます (DECLARE ステートメントを参照)。

スキーマ名を指定しないと、ブローカーのデータベース・ユーザーのデフォルト・スキーマが使用されます。

データ・ソース名を指定しないと、ノードの「データ・ソース」 属性によって指されているデータベースが使用されます。

WHERE 文節

WHERE 文節式はすべてのブローカーの演算子および関数をどのような組み合わせでも使用できます。この式は、表の列、メッセージ・フィールド、および宣言済み変数や定数を参照できます。

しかし、ブローカーは式を検証し、データベースが式全体を評価可能であるかを判別して、WHERE 文節式を扱うことに注意してください。可能である場合、式はデータベースに渡されます。データベースによる評価が可能であるためには、データベースでサポートされる関数と演算子だけを使用しなければなりません。

しかし、WHERE 文節は、メッセージ・フィールド、包含している SELECT によって宣言された相関名、および有効範囲内にある他の宣言済み変数や定数を参照できます。

データベースが式全体を評価できない場合は、ブローカーはトップレベルの AND 演算子を検索し、副次式を別々に検証します。それから、ブローカーに残りの副次式を評価させたまま、データベースに評価可能な副次式を渡すよう試みます。 この状態に関して以下の 2 つの理由で注意が必要です。
  1. WHERE 文節式への小さな変更であっても、パフォーマンスに大きく影響する場合があります。ユーザー・トレースを調べることにより、データベースに対してどれほどの式が渡されているかを判別できます。
  2. データベースの関数の中には、ブローカーの関数とわずかに動作が異なるものがあります。

エラーの処理

削除操作中にエラーが起きる可能性があります。例えば、データベースが操作可能でなくなる場合があります。その場合 (ノードの「データベース・エラーで例外をスロー」プロパティーが FALSE に設定されているのでない限り)、例外がスローされます。これらの例外は、該当する SQL コード、状態、ネイティブ・エラー、およびエラー・テキストの値を設定し、エラー・ハンドラーで処理できます (DECLARE HANDLER ステートメントを参照)。

データベース・エラーの処理について詳しくは、 データベース状態のキャプチャーを参照してください。

以下の例は、dataSource プロパティーが構成されていて、このプロパティーが識別するデータベースに SHAREHOLDINGS という表と ACCOUNTNO という列があることを想定しています。
DELETE FROM Database.SHAREHOLDINGS AS S
       WHERE S.ACCOUNTNO = InputBody.AccountNumber;

これによって、表 SHAREHOLDINGS の中の ACCOUNTNO 列の値が、メッセージの中の AccountNumber フィールドの値と等しい行はすべて、この表から削除されます。ゼロ、1 つ、または複数の行が表から削除される可能性があります。

次の例は、計算されたデータ・ソース、スキーマ、および表の名前の使用法を示します。
-- Declare variables to hold the data source, schema, and table names and
-- set their default values
DECLARE Source CHARACTER 'Production';
DECLARE Schema CHARACTER 'db2admin';
DECLARE Table CHARACTER 'DynamicTable1';

-- Code which calculates their actual values comes here

-- Delete rows from the table
DELETE FROM Database.{Source}.{Schema}.{Table} As R WHERE R.Name = 'Joe';
関連概念
ESQL の概要
関連タスク
ESQL の開発
関連資料
構文図: 使用可能なタイプ
ESQL のステートメント
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ak04990_