S-JIS[2010-07-19/2010-07-24] 変更履歴

DELETE文

OracleSQLのDELETE文のメモ。


削除する件数の制限

deleteでもROWNUM擬似列を使うことが出来る。以下の例では、最大100件削除される。

delete from テーブル
where ROWNUM <= 100
;

他テーブルでの存在有無によるデータの削除

バックアップテーブルにデータが存在している場合に元テーブルのデータを削除する例。

delete from 元テーブル t
where exists (
	select * from バックアップテーブル f
	where f.キー = t.キー
);

親テーブルにデータが存在しない明細データを削除する例。

delete from 明細テーブル t
where not exists (
	select * from 親テーブル f
	where f.キー = t.キー
);

削除した値の取得(returning)

returning句を使うと、DELETEした際の(削除前の)値をバインド変数に取り込むことが出来る。[2010-07-24]

delete from テーブル
where 条件
returning 項目名… into :バインド変数名…
;

JDBCでreturningを使う方法


バインド変数はPL/SQLで使う他に、SQL*Plusでも定義することが出来る。

SQL> var v1 number

SQL> delete from EMP where ENAME='KING' returning EMPNO into :v1;
1行が削除されました。

SQL> print v1
        V1
----------
      7839
SQL> var v1 number
SQL> var v2 number

SQL> delete from EMP where ENAME='KING' returning EMPNO,SAL into :v1,:v2;
1行が削除されました。

SQL> print
        V1
----------
      7839

        V2
----------
     14930

削除対象が無かった場合(削除件数が0件の場合)は、バインド変数は変更されない。(NULLになるわけでもない)
複数のレコード(行)が削除対象になった場合、バインド変数がnumber等の単純な型だと代入することが出来ない。
この辺りは、UPDATEのRETURNINGと同様。


SQLメモへ戻る / Oracle目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま