insert
ステートメントで削除された行delete
を、DB2 SQL のストアド プロシージャ内の新しいテーブルに挿入するにはどうすればよいですか?
DB2 では、次の構文で削除された行を返すことができます。
select * from old table (
delete from my_table where foo > 1
)
insert
何らかの理由で、そのステートメントから返された結果に基づいて 単に実行することはできません。ただし、一般的なテーブル式を厄介な回避策として使用できます。
with deleted as (
select * from old table (delete from my_table where foo > 1)
)
select * from new table (insert into archive_table select * from deleted)
これには、私が望まない不必要な余分な select ステートメントがありますが、少なくとも機能します。削除された行は別のテーブルに挿入されます。
ただし、ストアド プロシージャ内でこれを行うにはどうすればよいでしょうか。
ストアド プロシージャでは、そのままの select ステートメントを使用できません。set
私はそれを声明の中に入れることを考えました:
set my_var = (
with deleted as (
select * from old table (delete from my_table where foo > 1)
)
select * from new table (insert into archive_table select * from deleted)
);
ただし、このようなステートメント内では共通テーブル式が許可されていないため、これは失敗します。
ストアドプロシージャ内でこれを行う方法はありますか?
(回避策として他の方法を使用してタスクを実行できます。しかし、この方法で実行できるかどうかを知りたいです。これが不可能な場合、それはかなりばかげた制限のように思えます。)
更新: DB2 9.7 LUW を使用しています。