- - PR -
PL/SQL 更新処理について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-09-17 16:28
Oracle9i使用しています。
TMP_A (一時ファイル) ITEM_CD PALE_NR ---------------------- A0001 0 A0002 0 A0005 0 一時ファイルのPALE_NR にマスタ値を設定するパッケージを作っています。 M_ITEM (商品マスタ) ITEM_CD PALE_NR -------------------- A0001 50 A0002 40 A0003 80 A0004 20 A0005 100 PROCEDURE AAA IS PROGRAM_ID CONSTANT CHAR(30) := 'ARRIVE.AAA'; CURSOR curTarget IS SELECT ITEM_CD FROM TMP_A WHERE PALE_NR <> 0 GROUP BY ITEM_CD; rowTarget curTarget%ROWTYPE; CURSOR curMitem( ItemCd M_ITEM.ITEM_CD%TYPE )IS SELECT PALE_NR FROM M_ITEM WHERE ITEM_CD = ItemCd; rowMitem curMitem%ROWTYPE; BEGIN PLOG.INFO(logCtx, PROGRAM_ID || ' START'); OPEN curTarget; LOOP FETCH curTarget INTO rowTarget; OPEN curMitem(rowTarget.ITEM_CD); EXIT WHEN curTarget%NOTFOUND; UPDATE TMP_A SET PALE_NR = rowMitem.PALE_NR WHERE ITEM_CD = rowTarget.ITEM_CD; END LOOP; CLOSE curTarget; CLOSE curMitem; PLOG.INFO(logCtx, PROGRAM_ID || ' END'); EXCEPTION 〜・・・・・ ITEM_CD をキーとして、PALE_NRをマスタ値で更新したいのですが 更新されず、値は 0 のままになっています。。。 LOOPの入れ子が必要?? 行き詰まっておりますので ヒントを頂けるとありがたいです。宜しくお願い致します。 [ メッセージ編集済み 編集者: ksally 編集日時 2008-09-17 16:30 ] | ||||||||||||
|
投稿日時: 2008-09-17 17:06
こんにちは。
DBMS_OUTPUTやデバッガを利用してどこが原因箇所か(ループに入ってきているか or 値は正しいか etc...)を見つけることをお勧めします。 _________________ | ||||||||||||
|
投稿日時: 2008-09-17 17:32
に対して
という条件ではそもそも1件も該当レコードが無いのでは? 他にも
ではなく FETCH curTarget INTO rowTarget; EXIT WHEN curTarget%NOTFOUND; OPEN curMitem(rowTarget.ITEM_CD); という順番が正しいのでは? そもそもカーソル2つもいらないような・・・。 | ||||||||||||
|
投稿日時: 2008-09-17 17:55
よくみてませんが、UPDATE文じゃだめなんですか?
|
1