- PR -

重複情報の取得

1
投稿者投稿内容
min
会議室デビュー日: 2005/07/04
投稿数: 4
投稿日時: 2005-07-04 15:39
はじめまして、お世話になります。
既存のスレッドを拝見させていただきましたが、
丁寧かつ前向きな皆様の対応に深く感銘を受けます。
今後ともよろしくお願いします。

さて本題ですが、

INSERT INTO TABLE_A (SELECT * FROM TABLE_A)  ※TABLE_A:主キーあり

上記SQLを実行した場合、当然ながら一意制約エラーが発生します。
主キーが重複したために発生するわけですが、
この際の重複(キー)情報を取得する方法を探しています。

想定場面として、CSVデータ読込(バッチ処理)操作時に
「XXXフィールドがYYYであるレコードが既に存在します。」
といった情報をオペレータに通知したいと考えているのです。
例として単純なケースを挙げましたが、
実際に行いたいのは、SELECT側が別テーブル(例えばTABLE_B)の場合なのです。

SELECT文を1レコードずつ発行してチェックする方法を考えてはみたのですが
理想として、OraDatabaseオブジェクトが重複した行のキー情報を保持していて
それを参照する、といった簡潔な方法があれば良いなぁと思っています(願望)。

本件についてご存知の方、他案をお持ちの方、御教授の程よろしくお願いします。
言語はVB6.0、DBMSはOracle9.2iを使用、接続はOraOLEDBです。

[ メッセージ編集済み 編集者: min 編集日時 2008-10-20 19:11 ]
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-07-04 15:51
select key_of_table_a from TABLE_A
where key_of_table_a in ( select key_of_table_b from TABLE_B )

ふたつのテーブルのフィールドの重複チェックするだけなら、こんなのでどうでしょうか。
min
会議室デビュー日: 2005/07/04
投稿数: 4
投稿日時: 2005-07-04 20:11
早速の回答ありがとうございます。
重複チェックを事前に行う方式として、1キーごとにチェックを行うのではなく
ご指摘いただいた方法にて一括でチェックを行うことができました。

身勝手な思いではありますが、
(INSERT発行後)キー重複が発生した際の情報はOracle内部のどこかに保持しているだろう、
との期待があったため、今回の質問となってしまった次第です。

結論として、無駄な更新処理回避の意味でもご指摘いただいた方法にて対応をする
考えではありますが、例として挙げている(事前ではなく事後の情報取得)
>OraDatabaseオブジェクトが重複した行のキー情報を保持していてそれを参照する
という、この類の対応方法はないものでしょうか。

参考までに何かヒントとなるキーワード等を聞かせていただければ幸いです。
1

スキルアップ/キャリアアップ(JOB@IT)