• ベストアンサー

SQL*Loader Append

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

質問者が選んだベストアンサー

  • ベストアンサー
  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.3

■APPENDで主キー重複が起きるか? ダイレクトパスロードか否かで、結果が変わります。 LoaderのオプションがDIRECT = TRUE、かつダイレクトモード可能な条件を満たしている場合、ダイレクトパスロードとになります(素晴らしく速い)が、APPENDモードで主キー重複のレコードができてしまいます。 主キーが重複した場合、主キー制約/インデックスが無効状態になっており、INSERT/DELETE/主キーのUPDATEがエラーになってしまいますので、ご注意ください。 その場合は、TRUNCATE TABLEでいったんデータを消してしまえば、復活できます。 ダイレクトパスロードでない場合のAPPENDモードでは、主キー重複はエラーではじかれます。 ■REPLACEの動き PKが重複するものの入れ替えではなく、まるっと削除してからの追加になります。 TRUNCATEとの違いは、途中でエラーが発生したときにレコードが削除する前の状態に戻る点です。 レコードが消えて良いならTRUNCATEモードのほうが速いですね

anman0201
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

>これはテーブルのPKが重複していても新しく行がついかされるということでしょうか? そんなことになったらprimary keyの意味が全くないと思いますが・・ 一意制約違反になります。 >逆にREPLACEはPKが重複しているデータに上書きされるということでしょうか? 上書きというか、対象テーブルの全データをdeleteしてからinsertします。 http://download.oracle.com/docs/cd/E16338_01/server.112/b56303/ldr_control_file.htm#i1006862

すると、全ての回答が全文表示されます。
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

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

すると、全ての回答が全文表示されます。

関連するQ&A