- PR -

Oracleでデータコピーする方法

1
投稿者投稿内容
handmadedude
会議室デビュー日: 2004/09/06
投稿数: 4
投稿日時: 2004-09-06 21:22
Oracleであるテーブルの特定レコードだけを取り出して
一部データを加工し(当然一意制約に引っかからないようにして)
再度当該テーブルへインポートする処理を行ないたいと
思っています。
この場合都度テンポラリテーブルをCreateしてInsertして
データ補正後、元のテーブルにInsertして
テンポラリテーブルを削除しないといけないのでしょうか?
もっとスマートなやり方があれば教えていただきたいです。
実際は上記をスクリプトで流すことを考えているので
出来るだけコードが肥大化したり見づらくならない方法
を教えていただけると幸いです。

よろしくお願いします。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-09-07 09:40
Insert Select文では駄目なのですか?

それ以上を求めるのであれば
提示されている仕様が不明瞭です。

例えば、「当然一意制約に引っかからないようにして」←これ
何が当然なのか不明です。

一意制約とは、データ構成の制約でしかありませんから
それ以上でもそれ以下でも無く、Oracleの仕様で決められた通りに動くのだけです。
つまり、人間様が考える、
・事前に既存コードのレコードは排除、
・一意制約違反のレコードがきたらワーニング出力で処理続行
・一意制約違反のレコードがきたらエラーで処理破棄
・一意制約違反のレコードがきたらオペレーション確認
は、SQLの責務範囲外です。
# 責務範囲外とは、SQLが責任を持って判断しないという事です。
handmadedude
会議室デビュー日: 2004/09/06
投稿数: 4
投稿日時: 2004-09-07 10:11
引用:

はにまるさんの書き込み (2004-09-07 09:40) より:
Insert Select文では駄目なのですか?

それ以上を求めるのであれば
提示されている仕様が不明瞭です。

例えば、「当然一意制約に引っかからないようにして」←これ
何が当然なのか不明です。




とあるマスタテーブルがあり、これにID番号を付与します。
ここに主キー設定を施しております。

このテーブルから一部データを抽出しコピーしたかったのですが
そのままだと一意制約違反になるため別のID番号を付与
するという所作を施したかったということなのですが
この記述が抜けており大変失礼しました。

確かに助言いただいたInsert Select文で処置できますね。

どうもありがとうございました。
1

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