SQL 解説書

DELETE

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-----------------------------><
 

説明

FROM table-name または view-name
行を削除する表の名前 (table-name) または 視点の名前 (view-name) を指定します。 この名前は、カタログに存在する表または視点を指定するものでなければならず、 カタログ表、カタログ視点、要約表、または読み取り専用の視点は指定できません。 (読み取り専用の視点については、CREATE VIEW を参照してください)。

table-name がタイプ付きの表である場合は、 このステートメントを使用すれば、その表またはそれに関係する副表の行を削除できます。

view-name がタイプ付き視点である場合は、このステートメントを使用すれば、 その基礎表の行またはその視点に関係する副視点の基礎表を削除できます。 view-name が基礎表 (タイプ付き表) を伴う通常の視点である場合、 このステートメントを使用すれば、 そのタイプ付き表またはそれに関係する副表の行を削除できます。

WHERE 節内で参照できるのは、指定された表の列だけです。 位置指定 DELETE の場合は、 FROM 文節に指定されているのと同じ表または視点を、 関連するカーソルにも ONLY を使用せずに指定しなければなりません。

FROM ONLY (table-name)
タイプ付き表の場合に適用できます。 ONLY キーワードは、指定された表のデータだけをステートメントが適用し、 その表に関係する副表の行は削除できないことを指定します。 位置指定 DELETE の場合は、FROM 文節に指定されているのと同じ表を、 関連するカーソルにも ONLY を指定して指定しなければなりません。 table-name がタイプ付き表でない場合は、 このステートメントに ONLY を使用しても効果はありません。

FROM ONLY (view-name)
このステートメントはタイプ付き視点のみに適用されます。 ONLY キーワードは、 指定された視点のデータだけにこのステートメントが適用されることを指定します。 副視点の行は、このステートメントでは削除できません。 位置指定 DELETE の場合は、FROM 文節に指定されているのと同じ視点を、 関連するカーソルにも ONLY を使用して指定しなければなりません。 view-name がタイプ付き視点でない場合は、 このステートメントに ONLY キーワードを使用しても効果はありません。

correlation-name
探索条件 (search-condition) の中で、 表または視点を指定するために使用することができます。 (相関名 (correlation-name) については、 言語要素 を参照してください。)

WHERE
削除する行を選択する条件を指定します。 この文節は、省略するか、探索条件を指定するか、 あるいはカーソルの名前を指定できます。 この文節を省略すると、表または視点のすべての行が削除されます。

search-condition
探索条件 に説明されているように、探索条件を指定します。 副照会以外の探索条件の各列名 は、 該当の表または視点の列を指定するものでなければなりません。

search-condition は、該当の表または視点の各行に適用されます。 search-condition の結果が「真」の行だけが削除されます。

探索条件に副照会が含まれる場合、 その副照会は、探索条件 が行に適用されるたびに実行され、 その結果が探索条件 の適用の対象として使用されます。 実際には、相関参照が含まれていない副照会は一度実行されるのに対し、 相関参照の含まれている副照会は各行ごとに一度ずつ実行しなければならない場合があります。 副照会で DELETE ステートメントの対象の表、 または削除規則が CASCADE あるいは SET NULL の従属表が参照されている場合、 その副照会は行が削除される前に完全に評価されます。

CURRENT OF cursor-name
プログラムの DECLARE CURSOR ステートメントで定義されたカーソルを指定します。

DECLARE CURSOR ステートメントは、DELETE ステートメントの前になければなりません。

指定する表または視点は、 そのカーソルの SELECT ステートメントの FROM 文節でも指定されていなければならず、 またそのカーソルの結果表が読み取り専用であってはなりません。 (読み取り専用の結果表については、DECLARE CURSOR を参照してください。)

DELETE ステートメントが実行される場合、 カーソルは行の位置になければなりません。その行が削除されます。 削除後、カーソル位置はその結果表の次の行の前になります。 次の行がない場合、カーソル位置は最後の行の後になります。

規則

例 1: DEPARTMENT 表から部門 (DEPTNO) 'D11' を削除します。

  DELETE FROM DEPARTMENT
  WHERE DEPTNO = 'D11'

例 2: DEPARTMENT 表からすべての部門を削除します (つまり、表を空にします)。

  DELETE FROM DEPARTMENT


脚注:

90
ステートメントの処理に使用されるパッケージは、 値 SQL92E または MIA を指定したオプション LANGLEVEL を使用してプリコンパイルされます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]