ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Oracle RETURNING

2010-07-24 22:01:41 | PG(RDBMS)

スレイヤーズRETURNとかエルフを狩るモノたちリターンズとかの戻ってきた連中のことではなく(笑)、
OracleのINSERTUPDATEDELETE文には、RETURNING(RETURN)句という構文があるという話。
SQL実行時に対象となったデータのキー値などを別途取得することが出来る。

なんでRETURNINGに興味を持ったかと言うと、テーブル間のデータ移動(新しいテーブルにデータをコピーし、元のテーブルからは削除する)に使えそうだと思った為。
MERGE文調べていたのもその一環)
データ移動にはinsertとdeleteを実行する必要があるが、insert-selectを実行する際にROWNUMで件数を絞り(多すぎるとバッファーに負荷をかけてしまうから)、実際に挿入したデータのキーをRETURNINGで取得してdeleteのWHERE条件に指定できないか、と思った為。

まぁ、実際には色々な理由により、この目的には使用できなかったわけだが(苦笑)
・INSERT文でSELECTを使用する構文では、RETURNINGを使うことが出来ない!
・実行結果が複数行になった場合に、それらの値をRETURNINGから取得する方法が分からない。(JDBCでの取得方法が分からないが、PL/SQLでも外部(SQL*Plus)に返す方法はよく分からない。謎のテーブル(テーブルコレクション)を使えば出来そうだが、ストアドファンクションを定義する方法は避けたい)

しかし、insert時にシーケンスを使って値を採番して、それを取得する目的には使えそうだ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする