機能
表から探索条件を満たす行を削除します。
記述形式
参照項番
探索条件 → “2.12 探索条件”
権限
DELETE文:探索を実行できるのは、処理対象の表のDELETE権の保持者です。ただし、探索条件に副問合せを指定する場合、その副問合せに指定する表のSELECT権が必要です。
一般規則
DELETE文にROWNUMは指定できません。
行を削除する表の名前を指定します。
表名で指定した表がビュー表の場合、そのビュー表に含まれる表が対象となります。
表名の有効範囲はDELETE文:探索の全体となります。
探索条件を指定した場合、探索条件が真となる行を削除します。
探索条件を省略した場合、表のすべての行を削除します。
探索条件によって真となる行が存在しなかった場合、または表に行が存在しなかった場合、例外(データなし)となります。
探索条件に副問合せを指定する場合、表名で指定した表を、副問合せのFROM句に指定することはできません。
探索条件の副問合せに指定した導出表にはORDER BY句を指定することはできません。
表名で指定した表に、トリガ事象にDELETEを指定したトリガを定義している場合、被トリガSQL文中に指定した表名と同じ表名を探索条件の副問合せのFROM句に指定することはできません。表名がビュー表の場合、そのビュー表に含まれる表が対象となります。
占有モード指定は、問合せ指定を指定した場合に、問合せ指定のデータベース資源の占有の方法を指定します。
占有モードを指定したSQL文が読み込んだデータベース資源は、占有モード指定により、以下のようにデータベース資源を占有します。なお、更新する行は占有モード指定にかかわらず、非共有モードでトランザクションの終了までデータベース資源を占有します。
占有モード指定 | 占有の方法 |
---|---|
EXCLUSIVE LOCK | 非共有モードでトランザクション終了までデータベース資源を占有します。 |
SHARE LOCK | 共有モードでトランザクション終了までデータベース資源を占有します。 |
FREE LOCK | 共有モードでSQL文終了までデータベース資源を占有します。 |
NO LOCK | データベース資源を占有しません。 |
占有モードを指定したSQL文によって読み込まれた資源は、SET TRANSACTION文で指定された内容にかかわらず、以下のようになります。
占有モード指定 | 読込み水準 |
---|---|
EXCLUSIVE LOCK | 他のトランザクションによって占有されていない行を読み込みます。当該SQL文で読み込んだ行は、トランザクション終了まで他のトランザクションに更新されることはないため、一度読み込んだ行は他のトランザクションによって更新されないことが保証されます。 |
SHARE LOCK | 他のトランザクションによって占有されていないか、または共有モードで資源を占有されている行を読み込みます。当該SQL文で読み込んだ行は、トランザクション終了まで他のトランザクションに更新されることはないため、一度読み込んだ行は他のトランザクションによって更新されないことが保証されます。 |
FREE LOCK | 他のトランザクションによって占有されていないか、または共有モードで資源を占有されている行を読み込みます。当該SQL文で読み込んだ行は、他のトランザクションに更新されることがあるため、同一トランザクションで再検索すると最新の結果を検索することができます。 |
NO LOCK | 他のトランザクションでどのような占有をされた資源でも参照することが可能なため、同一トランザクションで再検索すると最新の結果を検索することができます。 |
占有モードの単位は、R_LOCKがYESの場合は行単位となります。R_LOCKがNOの場合は、ページ単位またはDSI単位の占有になります。
動作環境パラメタにDSO_LOCKを指定したり、環境変数でRDBDSOを指定した場合、占有モードを指定したSQL文は実行できません。
DELETE文にROWNUMは指定できません。
使用例
表TBL1から探索条件が真となる行を削除する例を示します。
DELETE FROM TBL1 WHERE COL2 = 'R' AND COL3 = 1
表TBL1が以下に示すデータを持っているとします。表TBL1の行のうち、探索条件で指定された条件を満たす6番目の行が削除されます。探索条件が指定されなかった場合には、表TBL1の全行が削除されます。
SQL文実行中の読み込まれた資源を共用モードで占有する例を示します。
DELETE FROM 在庫管理.在庫表 WHERE COL1 = 1 WITH OPTION LOCK_MODE(FREE LOCK)