DELETE ステートメントは、表または視点から行を削除します。 視点から行を削除すると、その視点の基礎となる表から行を削除することになります。
このステートメントには、以下の 2 つの形式があります。
呼び出し
DELETE ステートメントは、アプリケーション・プログラムに組み込むか、 あるいは動的 SQL ステートメントの使用によって発行することができます。 このステートメントは、動的に準備可能な実行可能ステートメントです。
このステートメントのどの形式を実行する場合も、ステートメントの許可 ID に、 以下の特権が少なくとも 1 つ含まれている必要があります。
探索 DELETE ステートメントを実行する場合、 副照会で参照される表または視点のそれぞれに対して、 ステートメントの許可 ID に、 以下の特権が少なくとも 1 つ含まれている必要があります。
パッケージが SQL92 規則を使用してプリコンパイルされており 90 、 探索 DELETE 形式の search-condition に表または視点の列への参照が含まれている場合には、 このステートメントの許可 ID の特権には以下の特権のうち少なくとも 1 つが含まれている必要があります。
指定した表または視点が ONLY キーワードの後にくる場合、 ステートメントの許可 ID が持つ特権にも、 指定した表または視点の副表または副視点ごとに SELECT 特権が含まれている必要があります。
静的 DELETE ステートメントの場合、グループ特権は検査されません。
構文
Searched DELETE:
>>-DELETE FROM----+-table-name-------------------+--------------> +-view-name--------------------+ '-ONLY--(--+-table-name-+---)--' '-view-name--' >-----+---------------------------+-----------------------------> | .-AS-. | '-+----+--correlation-name--' >-----+--------------------------+----------------------------->< '-WHERE--search-condition--'
Positioned DELETE:
>>-DELETE FROM----+-table-name-------------------+--------------> +-view-name--------------------+ '-ONLY--(--+-table-name-+---)--' '-view-name--' >----WHERE CURRENT OF--cursor-name-----------------------------><
説明
table-name がタイプ付きの表である場合は、 このステートメントを使用すれば、その表またはそれに関係する副表の行を削除できます。
view-name がタイプ付き視点である場合は、このステートメントを使用すれば、 その基礎表の行またはその視点に関係する副視点の基礎表を削除できます。 view-name が基礎表 (タイプ付き表) を伴う通常の視点である場合、 このステートメントを使用すれば、 そのタイプ付き表またはそれに関係する副表の行を削除できます。
WHERE 節内で参照できるのは、指定された表の列だけです。 位置指定 DELETE の場合は、 FROM 文節に指定されているのと同じ表または視点を、 関連するカーソルにも ONLY を使用せずに指定しなければなりません。
search-condition は、該当の表または視点の各行に適用されます。 search-condition の結果が「真」の行だけが削除されます。
探索条件に副照会が含まれる場合、 その副照会は、探索条件 が行に適用されるたびに実行され、 その結果が探索条件 の適用の対象として使用されます。 実際には、相関参照が含まれていない副照会は一度実行されるのに対し、 相関参照の含まれている副照会は各行ごとに一度ずつ実行しなければならない場合があります。 副照会で DELETE ステートメントの対象の表、 または削除規則が CASCADE あるいは SET NULL の従属表が参照されている場合、 その副照会は行が削除される前に完全に評価されます。
DECLARE CURSOR ステートメントは、DELETE ステートメントの前になければなりません。
指定する表または視点は、 そのカーソルの SELECT ステートメントの FROM 文節でも指定されていなければならず、 またそのカーソルの結果表が読み取り専用であってはなりません。 (読み取り専用の結果表については、DECLARE CURSOR を参照してください。)
DELETE ステートメントが実行される場合、 カーソルは行の位置になければなりません。その行が削除されます。 削除後、カーソル位置はその結果表の次の行の前になります。 次の行がない場合、カーソル位置は最後の行の後になります。
規則
削除操作が RESTRICT の削除規則によって禁止されていなければ、選択された行は削除されます。 選択された行の子孫である行もすべて影響を受けます。
他の参照制約が実施された後で、非ヌルの外部キーが既存の親行を指すようにするために、 NO ACTION の削除規則が検査されます。
注
データベース・サーバーにファイル・サーバーの値が登録されていない場合、 DATALINK 値を削除しようとするとエラーが起きるかもしれません (SQLSTATE 55022)。
削除時に使用できないサーバーにリンクされている行を削除すると、 エラーが起こる可能性があります (SQLSTATE 57050)。
例
例 1: DEPARTMENT 表から部門 (DEPTNO) 'D11' を削除します。
DELETE FROM DEPARTMENT WHERE DEPTNO = 'D11'
例 2: DEPARTMENT 表からすべての部門を削除します (つまり、表を空にします)。
DELETE FROM DEPARTMENT