• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バッチでINSRT文実行すると一制約エラー、会話型で実行するとエラーに)

バッチでINSERT文実行すると一制約エラー、会話型で実行するとエラーに

このQ&Aのポイント
  • バッチでINSERT文を実行すると一意制約エラーが発生し、会話型で実行するとエラーが発生しない現象が発生しています。
  • Oracle10gを使用しており、バッチの内容は「sqlplus USER/PASS@DB @COPY_テーブル名.sql > COPY_テーブル名.log」です。
  • COPY_テーブル名.sqlの内容は、「INSERT INTO コピー先テーブル名 (AA, BB, CC, DD, EE) SELECT コピー元テーブル名.AA, コピー元テーブル名.BB, コピー元テーブル名.CC, コピー元テーブル名.DD, コピー元テーブル名.EE FROM コピー元テーブル名;」です。

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

  • ベストアンサー
  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

>57行が作成されました。 >INSERT INTO コピー先テーブル名 ( >* >行1でエラーが発生しました。: >ORA-00001: 一意制約(コピー先テーブル名_PK)に反しています 57行が作成されて、その後にINSERTですから、 >FROM コピー元テーブル名; >/ を FROM コピー元テーブル名 / のようにコピー元テーブル名のあとの;を削除してください。 SQL*Plusは文中の;で文を実行して、空白無しの/だけの行で、現在のSQLバッファの文を実行します。 つまり、あなたのCOPY_テーブル名.sqlではINSERT文が;で一度実行されて、/でもう一度実行されるのでPK違反になるのです。 COPY_テーブル名.sql の先頭に set echo on を書いて実行すると、2回実行していることがわかると思います。

gogosurfin
質問者

お礼

SaKaKashi様 回答ありがとうございます。 ご指摘の通り、2回実行していました。 /の行を削除して上手く行く事を確認しました。 ありがとうございました。