• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Insertの質問)

Insertの質問

このQ&Aのポイント
  • Oracle11gとC#.NETで開発している初心者が、ストアドプロシージャによるテーブルからテーブルへのインサートで問題が発生しています。
  • 特にD売上見通台帳のIDをプライマリーキーにしているため、一意制約違反のエラーが発生しています。
  • 質問者は教えていただける方を探しており、ご意見やアドバイスをお待ちしています。

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

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

どうしても今のストアドプロシジャでしたいなら、 seqD売上台帳 number; と定義して、 fetch cur into cur_rec; exit when cur%notfound; の次に select seqD売上台帳ID.nextval into seqD売上台帳 from dual ; を実行して、 INSERT INTO D売上見通台帳 ( ID,注文主,受注NO,売上日,品番,品名,数量, 登録日時,登録者,更新日時,更新者 ) VALUES ( seqD売上台帳,cur_rec.注文主,cur_rec.受注NO,cur_rec.品番,cur_rec.品名, cur_rec.数量,cur_rec.登録日時,cur_rec.登録者,cur_rec.更新日時,cur_rec.更新者 ) ; としてください。

miruchoko
質問者

お礼

大変参考になりました。 ありがとうございました。 また宜しくお願いします。

その他の回答 (3)

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

回答は既に出ていますので、プログラムの記述方法についてです。 このようなカーソルループであれば for loop文の方が楽に書けますよ。 ご参考まで。 http://download.oracle.com/docs/cd/E16338_01/appdev.112/b56260/static.htm#CIHBBCEC

miruchoko
質問者

お礼

ありがとうございます。 勉強いたします。

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

なぜストアドプロシジャで実行するのでしょうかね。 INSERT INTO D売上見通台帳 ( ID,注文主,受注NO,売上日,品番,品名,数量, 登録日時,登録者,更新日時,更新者 ) SELECT seqD売上台帳ID.nextval, 注文主,受注NO,売上日,品番,品名,数量, 登録日時,登録者 FROM D売上台帳 WHERE 売上日 = TO_CHAR(sysdate,'YYYY/MM/DD') ; ってやればいいのでは。 そもそも、seqD売上台帳ID.nextvalはselectしないと番号が進みません。 単にinsetのvalue句の中でseqD売上台帳ID.nextvalと書いてもカウントアップされないです。

回答No.1

seqD売上台帳ID.nextvalで取得される値が現在のD売上見通台帳のIDで存在する値が取得されるため、エラーになっているのではないですか? seqD売上台帳IDのシーケンス値を別途、D売上見通台帳の最大IDより大きくする必要があると思われます。

関連するQ&A