アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQL*Loaderのコントロールファイル内のパラメータ設定についてですが、
ネットで調べた結果
ロード方法をAPPENDとすると既存データがある場合は新しい行として追加とあるのですが、
これはテーブルのPKが重複していても新しく行がついかされるということでしょうか?

逆にREPLACEはPKが重複しているデータに上書きされるということでしょうか?

よろしくお願いいたします。

A 回答 (3件)

■APPENDで主キー重複が起きるか?


ダイレクトパスロードか否かで、結果が変わります。

LoaderのオプションがDIRECT = TRUE、かつダイレクトモード可能な条件を満たしている場合、ダイレクトパスロードとになります(素晴らしく速い)が、APPENDモードで主キー重複のレコードができてしまいます。

主キーが重複した場合、主キー制約/インデックスが無効状態になっており、INSERT/DELETE/主キーのUPDATEがエラーになってしまいますので、ご注意ください。
その場合は、TRUNCATE TABLEでいったんデータを消してしまえば、復活できます。

ダイレクトパスロードでない場合のAPPENDモードでは、主キー重複はエラーではじかれます。

■REPLACEの動き
PKが重複するものの入れ替えではなく、まるっと削除してからの追加になります。
TRUNCATEとの違いは、途中でエラーが発生したときにレコードが削除する前の状態に戻る点です。
レコードが消えて良いならTRUNCATEモードのほうが速いですね
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
詳しい解説ありがとうございます。
DELETEとTRUNCATEの違いはそんなところにあったんですね...

お礼日時:2011/02/07 10:15

>これはテーブルのPKが重複していても新しく行がついかされるということでしょうか?


そんなことになったらprimary keyの意味が全くないと思いますが・・
一意制約違反になります。

>逆にREPLACEはPKが重複しているデータに上書きされるということでしょうか?
上書きというか、対象テーブルの全データをdeleteしてからinsertします。

http://download.oracle.com/docs/cd/E16338_01/ser …
    • good
    • 0

> これはテーブルのPKが重複していても新しく行がついかされるということでしょうか?


PKの重複エラーになります。

> 逆にREPLACEはPKが重複しているデータに上書きされるということでしょうか?
現在テーブルにあるデータを全件削除(DELETE)して、データをINSERTします。
通常はREPLACEよりかは、TRUNCATEを使うと思います。
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A