- ベストアンサー
Insertの質問
- Oracle11gとC#.NETで開発している初心者が、ストアドプロシージャによるテーブルからテーブルへのインサートで問題が発生しています。
- 特にD売上見通台帳のIDをプライマリーキーにしているため、一意制約違反のエラーが発生しています。
- 質問者は教えていただける方を探しており、ご意見やアドバイスをお待ちしています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
どうしても今のストアドプロシジャでしたいなら、 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.更新者 ) ; としてください。
その他の回答 (3)
- yamada_g
- ベストアンサー率68% (258/374)
回答は既に出ていますので、プログラムの記述方法についてです。 このようなカーソルループであれば for loop文の方が楽に書けますよ。 ご参考まで。 http://download.oracle.com/docs/cd/E16338_01/appdev.112/b56260/static.htm#CIHBBCEC
お礼
ありがとうございます。 勉強いたします。
- SaKaKashi
- ベストアンサー率24% (755/3136)
なぜストアドプロシジャで実行するのでしょうかね。 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と書いてもカウントアップされないです。
- kaihatusha
- ベストアンサー率46% (7/15)
seqD売上台帳ID.nextvalで取得される値が現在のD売上見通台帳のIDで存在する値が取得されるため、エラーになっているのではないですか? seqD売上台帳IDのシーケンス値を別途、D売上見通台帳の最大IDより大きくする必要があると思われます。
お礼
大変参考になりました。 ありがとうございました。 また宜しくお願いします。