コンテンツフレーム起動

行の削除 文書を SAP ライブラリストラクチャに組み込む

データベーステーブルからデータを削除するためのオープン SQL 命令は以下のとおりです。

DELETE [FROM] < 対象> <>

この命令によって、データベーステーブル < 対象> から 1 行または複数行を削除することができます。ABAP ディクショナリビューからの行の削除は、ビューに 1 つのテーブルからの項目が含まれ、更新ステータスが読込と変更に定義されている場合にかぎり実行することができます。データベーステーブル < 対象> を静的または動的に指定します。

データベーステーブルの指定

データベーステーブルを静的に指定するには、< 対象> に以下を入力します。

DELETE [FROM] <dbtab> [CLIENT SPECIFIED] <>.

ここで <dbtab> は、ABAP ディクショナリで定義されたデータベーステーブルの名称です。 

データベーステーブルを動的に指定するには、< 対象> に以下を入力します。

DELETE [FROM] (< 名称>) [CLIENT SPECIFIED] <>.

ここで項目 < 名称> は、ABAP ディクショナリで定義されたデータベーステーブルの名称です。 

CLIENT SPECIFIED オプションを使用して、自動クライアント処理を無効にすることができます。

条件を使用した行の選択

条件を使用して削除する行を選択するには、以下を使用します。

DELETE FROM < 対象> WHERE <cond>.

WHERE の条件を満たすデータベーステーブルのすべての行が削除されます。キーワードとデータベーステーブルの間には FROM データ型が必要です。

WHERE 句をプログラムする際には、間違った行を削除しないよう特に注意してください。たとえば、動的 WHERE 句で空白の内部テーブルを指定すると、そのテーブルのすべての行が削除されます。

1 行でも削除されると SY-SUBRC 0 に設定され、削除されない場合は 4 に設定されます。SY-DBCNT には削除された行数が含まれます。

作業領域を使用した単一行の選択

WHERE 句を使用する代わりに、作業領域の内容を使用して削除する行を選択することができます。この場合、以下のように記述します。

DELETE < 対象> FROM <wa>.

これにより、作業領域 <wa> と同じ一次キーを持つ行が削除されます。キーワードとデータベーステーブルの間に FROM データ型を置かないでください。作業領域 <wa> は、データベーステーブルの行構造と少なくとも同じ桁数および整列のデータオブジェクトでなければなりません。キーは、作業領域の構造ではなくテーブル行の構造にしたがって読み込まれます。データベーステーブルの構造を参照して作業領域を定義することが賢明です。

データベーステーブルに、作業領域で指定されたものと同じ一次キーを持つ行がある場合、作業は正常に終了し、SY-SUBRC 0 に設定されます。それ以外の場合、行は削除されず、SY-SUBRC 4 に設定されます。

上記の命令の短縮形は DELETE <dbtab> です。

この場合、テーブル作業領域 <dbtab> の内容は同じ名称のデータベーステーブルから削除するために使用されます。このテーブル作業領域は TABLES 命令を使って宣言しなければなりません。この場合、データベーステーブルの名称を動的に指定することはできません。データベーステーブルと同じ名称のテーブル作業領域 ( リリース 4.0 以前では必須) を明確化のために使用する必要はなくなりました。

内部テーブルを使用した複数行の選択

内部テーブルを使用して複数行を削除することもできます。

DELETE < 対象> FROM TABLE itab <wa>.

これにより、内部テーブル <itab> の行と同じ一次キーを持つすべての行がデータベースから削除されます。前述の作業領域 <wa> と同じ原則が <itab> の行データ型にも適用されます。

指定されたキーを持つ行がないために行を削除できない場合は、操作全体を終了せずに内部テーブルの次の行が続いて処理されます。

内部テーブルのすべての行が処理されると、SY-SUBRC 0 に設定されます。それ以外の場合は 4 に設定されます。すべての行が使用されない場合、内部テーブルの行の総数からSY-DBCNT で削除された行数を引くことによって未使用行の数を計算することができます。内部テーブルが空白の場合、SY-SUBRC および SY-DBCNT 0 に設定されます。

データベーステーブルから複数行を削除する場合は、1 行ずつ削除するよりも内部テーブルを利用した方が効率的です。

 例

DELETE FROM SFLIGHT WHERE PLANETYPE = 'A310' AND
                             CARRID = 'LH'.

これにより、PLANETYPE の値が A310 CARRID の値が LH であるすべての行が SFLIGHT から削除されます。

 例

TABLES SPFLI.

DATA: BEGIN OF WA,
        CARRID TYPE SPFLI-CARRID,
        CONNID TYPE SPFLI-CONNID,
      END OF WA.

MOVE 'AA'         TO WA-CARRID.
MOVE '0064'       TO WA-CONNID.
DELETE SPFLI FROM WA.

MOVE 'LH'     TO SPFLI-CARRID.
MOVE '0017'   TO SPFLI-CONNID.

DELETE SPFLI.

CARRID および CONNID はテーブル SPFLI の一次キー項目です。一次キー AA 0064 および LH 0017 を持つ行が削除されます。

 例

DATA: BEGIN OF WA,
        CARRID TYPE SPFLI-CARRID,
        CONNID TYPE SPFLI-CONNID,
      END OF WA,
      ITAB LIKE HASHED TABLE OF WA
           WITH UNIQUE KEY CARRID CONNID.

WA-CARRID = 'UA'.WA-CONNID = '0011'.
INSERT WA INTO TABLE ITAB.

WA-CARRID = 'LH'.WA-CONNID = '1245'.
INSERT WA INTO TABLE ITAB.

WA-CARRID = 'AA'.WA-CONNID = '4574'.
INSERT WA INTO TABLE ITAB.

...

DELETE SPFLI FROM TABLE ITAB.

この例では、データテーブル SPFLI の一次キーの構造でハッシュテーブル ITAB を定義します。ハッシュテーブル ITAB に書き込んでから、内部テーブルの行と一次キー項目 (CARRID および CONNID) の内容が同じデータベーステーブルの行が削除されます。

 

 

 

 

コンテンツフレーム終了