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

インポート対象のテーブルが既に存在する場合、次のエラーが発生します。

IMP-00015: オブジェクトがすでに存在するため次の文は失敗しました:
"CREATE TABLE ...

SQL Loaderではデータにスペースや改行が含まれているとdatの作成がめんどうですし、dmpファイルでcreate文を削除するようなこともできればしたくありません。

データを追記したいのでテーブルを削除せずにインポートしたいのですが、どうすればよいでしょうか?

A 回答 (4件)

参考URLの内容はどうでしょうか?



参考URL:http://www2.odn.ne.jp/~cag07740/tech_info/oracle …
    • good
    • 2
この回答へのお礼

まさにこのことでした。マニュアルが読み足りませんでしたね。ありがとうございます。

お礼日時:2005/12/13 10:26

temporaryのユーザーを経由して、データを入れてはどうでしょうか?


例えば、ユーザーA、テーブルXにデータを入れたい場合、一度temporaryのユーザーBを作成し、ユーザーBに対してimpします。この状態で、
insert into ユーザーA.テーブルX
( select * from ユーザーB.テーブルX)
とすれば、データが追記できると思います。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
#1の回答"オプションignore=yを指定する"で解決しました。
場合によってはご指摘の方法がよい場合もありそうですね。

お礼日時:2005/12/13 10:39

基本的に、#1で案内された方法で、OKです。

(IGNORE=Y)
既存オブジェクトにデータを追加してくれます。

ただし、エラーがあっても継続処理する都合上、
予定しないエラーがないことを確認しないと痛い目に
あいますので、ご注意あれ。


#2で書かれていることは、オラクルユーザ的に理解不能です。
一般論としては良いと思いますが、IMP-00015の回避策が話題なので、
インポートユーティリティを知らずして、”自信あり”はちょっと。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
directの場合には特に注意します。

お礼日時:2005/12/13 10:38

SQLの「CREATE TABLE」文は「新規にテーブルを作成する命令」なのですが、そこを理解出来てますか?



インポート先が既存なのに「CREATE TABLE」したら「テーブル(オブジェクト)がすでに存在する」って言われるのは当たり前です。

たぶん、食わせたSQLファイルが「テーブルが存在しない状態の時に、新しくテーブルを作ってから、インポートを行う」と言う複数のステートメントをまとめたSQLファイルの筈です。

そこから「新しくテーブルを作ってから」の文を削除し「インポートを行う」だけ残し、別名でSQLファイルを保存して、それを使いましょう。

それと、既存テーブルにデータをインポートして追加する場合、既存データとインポートデータの主キーが衝突するとエラーになるので、その辺りの処理も追加しなければダメだと思います。

大元のSQLファイルを使って処理していた場所は「テーブルを新たに作ってインポート」をしていて、主キーが衝突しない前提で作られている筈で、その辺りのエラー処理が無い筈なので。

他人が作ったプログラムやシステムを流用して処理を追加するのは、とても大変な作業だと思います。頑張って下さい。
    • good
    • 0
この回答へのお礼

丁寧なご説明ありがとうございます。
oracle utility / import を使用していますので、言葉が足りませんでしたね。
なお#1の回答"オプションignore=yを指定する"で解決しました。

お礼日時:2005/12/13 10:30

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

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

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