いつもお世話になっております。
Oracle11gとC#.NETで開発している初心者です。
ストアドプロシージャによるテーブルからテーブルへの
インサートがうまくいかず悪戦苦闘しております。
下記の様な記述をしており、コンパイルは通ったのですが、
D売上見通台帳のIDをプライマリーキーにしており、
実際.NETで動かしてみると、一意制約違反でエラーとなって
しまいます。
どなたかご親切な方ご教授頂きたく、
宜しくお願い申し上げます。
記
create or replace
procedure dbInsert台帳追加
(
out_valoutpls_integer
)
as
cursor cur is
SELECT 注文主,受注NO,売上日,品番,品名,数量,
登録日時,登録者
FROM D売上台帳
WHERE 売上日 = TO_CHAR(sysdate,'YYYY/MM/DD')
;
cur_rec cur%rowtype;
begin
open cur;
loop
fetch cur into cur_rec;
exit when cur%notfound;
INSERT INTO D売上見通台帳
(
ID,注文主,受注NO,売上日,品番,品名,数量,
登録日時,登録者,更新日時,更新者
)
VALUES
(
seqD売上台帳ID.nextval,cur_rec.注文主,cur_rec.受注NO,cur_rec.品番,cur_rec.品名,
cur_rec.数量,cur_rec.登録日時,cur_rec.登録者,cur_rec.更新日時,cur_rec.更新者
)
;
end loop;
close cur;
out_val := sql%rowcount;
end;
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.更新者
)
;
としてください。
No.4
- 回答日時:
回答は既に出ていますので、プログラムの記述方法についてです。
このようなカーソルループであれば for loop文の方が楽に書けますよ。
ご参考まで。
http://download.oracle.com/docs/cd/E16338_01/app …
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PL/SQLカーソルの2重FORループ...
-
PL/SQLでのSQL文法
-
【PL/SQL】LOOPした動的SQLにて...
-
ORA-00904:無効な識別子の回避...
-
Accessのマクロでモジュールを...
-
Statement ignored というエラー
-
キャッシュを使わずにSELECTを...
-
エクセルVBAでUserFormを起動し...
-
Access VBAで行ラベルが定義さ...
-
WHERE句の実行順序
-
SQL*Plusの終了はquit?exit?
-
ストアドプロシジャからストア...
-
PL/SQLでSPOOLさせたいのですが...
-
Transact-SQLでストアードプロ...
-
Accessの数値から時間に変換す...
-
callで順に実行されるプロシー...
-
SQL*Loaderでのsysdate使用
-
SQL*Loader フォーマット変換...
-
ODBCリンクの際にACCESSでは読...
-
エクセル 日付による並べ替え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLカーソルの2重FORループ...
-
Texの枠囲み調節
-
カーソル定義での条件分岐
-
PL/SQLでのSQL文法
-
[Oracle9i]PL/SQLでFETCHしても...
-
カーソルで集合関数を使った場...
-
自動連番でカラムを更新したい
-
ORA-00904:無効な識別子の回避...
-
PL/SQLのOPEN cursor_name FOR...
-
カーソルフェッチにて、最終レ...
-
LaTeX特定の数式だけに通し番号...
-
指定した時間を除くためのテー...
-
PL/SQLでFORの働き
-
T-SQLのカーソルで
-
【PL/SQL】CURSOR ・・・ IS SE...
-
T-SQLで
-
【PL/SQL】LOOPした動的SQLにて...
-
カーソルループ内部でログを出力
-
PL/SQLでカーソルを指定する方法
-
PL/SQLで
おすすめ情報