|
|
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句を使うと、DELETEした際の(削除前の)値をバインド変数に取り込むことが出来る。[2010-07-24]
delete from テーブル where 条件 returning 項目名… into :バインド変数名… ;
バインド変数は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と同様。