プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。Oracle11を使ってます。

大規模システムで大容量のテーブルを毎日バッチで取込む必要が出てきました。
そのテーブル自体カラムが30前後で、4000万件あります。

その処理時間に頭を悩ませていましたら、MERGE句に巡りあいました。
AテーブルからBテーブルに入れるのですが、列定義(Colum数も全く違う列も存在)が若干違うのですが、それでもこれを使うことは可能でしょうか?

A    B
----- -----
A1    B1
A2    A2
A3    A3
A4    A6
A5    -

またべたのやり方ですと、Aテーブルを全件ループして、PK連結させて、Select-Insert or Select-Updateになると思うのですが、やはりデータがほとんど同じ場合と全件全部違う場合は、処理時間も軽減されるのでしょうか?

A 回答 (3件)

Merge文のサンプル。


http://www.shift-the-oracle.com/sql/merge.html

Bテーブルの項目数や属性とAテーブルの項目数や属性に依存関係はないです。
例えば、Bテーブルのvarchar2に、AテーブルのdateからTO_CHAR()を使ってデータを格納する
とかもできますし、Aテーブルに項目がないので固定値をBテーブルに入れることもできます。
AテーブルとCテーブルを結合した結果を副問い合わせの形で指定すれば、複数のテーブルから
格納することすらできます。

ただね、利用できない条件がOracle10gではあった。
(11gの環境では試していないので大丈夫かもしれませんが)

MERGE INTO Out_Table
USING In_Table
ON ( Out_Table.Key_ID = In_Table.Key_ID)
・・・
で、In_Tableのデータが以下のような場合、
In_Tableのプライマリキー:Key_ID,UpdateDate
Key_ID,UpdateDate,・・・
A,2012/1/5
B,2012/1/5
C,2012/1/5
A,2012/2/4
D,2012/2/4
・・・
Out_TableのKey_IDにAが存在していなくて、
1回のmerge命令で同じレコードに対してInsertとUpdateが同時に行われる場合、
エラーになってました。

べたの場合より早いかどうかは、少なくとも遅くはないとはいえますが、処理によっては同じになる
かもしれませんので、早いとは言い切れません。
(でも、プログラムは見やすいのは確実。)


## ANO2の人が書いているXEとは、ユーティリティ類等の一部機能がなかったと思いますが、
## 基本的にOracleの機能が実装されたソフト。
## 利用条件にも制約はあったと思いますが、無償。
## サイズが大きいのでダウンロードでタイムアウトしないかどうかはわかりませんし、
## ダウンロード元が英語サイトなので、私は、ちょっと薦めるには躊躇しますが、
## ダウンロードして使う環境を作っておけば、いろいろ試せるので便利なことは確か。
## 私の使っているとあるノートPCでも動いていたりする。。。
    • good
    • 0
この回答へのお礼

ありがとうございます。依存関係は無いのですね。

ご提示いただいた例は正にマージする対象テーブル(元)のデータ構造として存在します。
(元)TBはPK指定なしのテーブル構成で、(入)TBはPK指定をしています。

貴重なお話ありがとうございました。

>dda167さん
すみませんでした。てっきり冷やかしの方かと思いました。

ノートPCの環境なので、DLして試してみたいと思います。
Oracleの機能が実装されているという事はPlsql・SQLloaderもあるかもしれませんね。Oracleは高くて買う気にもなりません。
やってみます。

お礼日時:2012/11/03 13:27

>家に実行環境が無い



パソコンがあればXEをインストールするという手があります。

>リファレンスのページを見る限り出来なさそうですが

それだけでは回答のしようがありません。
    • good
    • 0
この回答へのお礼

oracleがないんです。さようなら。

お礼日時:2012/11/03 11:55

INSERTおよびUPDATEが可能であれば、MERGEもまた可能でしょう。



「べたのやり方」というのがカーソルループでグルグル回すことを
指しているのであれば、MERGE文のほうが遅いということはないでしょう。

机上で考えるより、一度やってみればわかることです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
家に実行環境が無い為、来週の為の情報収集です。
リファレンスのページを見る限り出来なさそうですが。。

お礼日時:2012/11/03 07:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!