スレイヤーズRETURNとかエルフを狩るモノたちリターンズとかの戻ってきた連中のことではなく(笑)、
OracleのINSERT・UPDATE・DELETE文には、RETURNING(RETURN)句という構文があるという話。
SQL実行時に対象となったデータのキー値などを別途取得することが出来る。
なんでRETURNINGに興味を持ったかと言うと、テーブル間のデータ移動(新しいテーブルにデータをコピーし、元のテーブルからは削除する)に使えそうだと思った為。
(MERGE文を調べていたのもその一環)
データ移動にはinsertとdeleteを実行する必要があるが、insert-selectを実行する際にROWNUMで件数を絞り(多すぎるとバッファーに負荷をかけてしまうから)、実際に挿入したデータのキーをRETURNINGで取得してdeleteのWHERE条件に指定できないか、と思った為。
まぁ、実際には色々な理由により、この目的には使用できなかったわけだが(苦笑)
・INSERT文でSELECTを使用する構文では、RETURNINGを使うことが出来ない!
・実行結果が複数行になった場合に、それらの値をRETURNINGから取得する方法が分からない。(JDBCでの取得方法が分からないが、PL/SQLでも外部(SQL*Plus)に返す方法はよく分からない。謎のテーブル(テーブルコレクション)を使えば出来そうだが、ストアドファンクションを定義する方法は避けたい)
しかし、insert時にシーケンスを使って値を採番して、それを取得する目的には使えそうだ。