- - PR -
For カーソル文
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-11-18 20:26
よろしくお願い致します。
・PL/SQL文以下のような仕様の機能を追加しました。 カーソルからFETCHして取り出した値をマスタテーブル2つとチェックを 行い、マッチするデータがあれば、値を更新する。 ・FORカーソル文で以下のように組んでみました。 FOR l_b002_rec IN cl_cursor_b001 LOOP IF (l_001_rec.L_KBN || l_001_rec.D_KBN) = ( l_b001_rec.OLD_L_KBN || l_b001_rec.OLD_D_KBN)THEN l_match_flg := 1; -- マッチデータ有 l_b001_rec.L_KBN := l_b001_rec.L_KBN; l_b001_rec.D_KBN := l_b001_rec.D_KBN; END IF; END LOOP; -- マッチするデータがなかった場合に行う IF l_match_flg = 0 THEN FOR l_b003_rec IN cl_cursor_l_b002 LOOP IF (l_001_rec.L_KBN) = (l_b002_rec.OLD_L_KBN) THEN l_match_flg := 1; -- マッチデータ有 l_b001_rec.L_KBN := l_b002_rec.L_KBN; l_b001_rec.D_KBN := l_b002_rec.D_KBN; END IF; END LOOP; END IF; 結果がマスタのl_b001_recのデータとマッチする場合は うまく値の更新ができましたが、その他の値に関しては、 次のl_b002_recの値を見に行って、いないのか? 値が更新されません。 どこが間違っているのか ご教示下さい。 またこんなのじゃ分らないとか、ご指摘も何なりと 言ってくだされば有り難いです。 よろしくお願い致します。 |
|
投稿日時: 2007-11-18 21:54
ループ変数l_b002_recはFORループ内でのみ有効です
FOR l_b002_rec IN cl_cursor_b001 LOOP |
|
投稿日時: 2007-11-18 22:54
99riさん!早速のご指摘ありがとうございます。
少し投稿したソースに間違っていましたので、修正しました。 FOR l_m001_rec IN cl_cursor_b001v LOOP IF (l_001_rec.LARGE_KBN || l_001_rec.DETAILS_KBN) = ( l_m001_rec.OLD_LARGE_KBN || l_m001_rec.OLD_DETAILS_KBN)THEN l_match_flg := 1; -- マッチするデータ有 l_001_rec.LARGE_KBN := l_m001_rec.LARGE_KBN; l_001_rec.DETAILS_KBN := l_m001_rec.DETAILS_KBN; END IF; END LOOP; -- マスタl_m002_recとマッチするデータがなかった場合 IF l_match_flg = 0 THEN FOR l_m002_rec IN cl_cursor_b002v LOOP IF (l_001_rec.LARGE_KBN) = (l_m002_rec.OLD_LARGE_KBN) THEN l_match_flg := 1; -- マッチするデータ有 l_001_rec.LARGE_KBN := l_m002_rec.LARGE_KBN; l_001_rec.DETAILS_KBN := l_m002_rec.DETAILS_KBN; END IF; END LOOP; END IF; ・l_001_recの'L_KBN','D_KBN'がマスタl_m001_recの'OLD_L_KBN' 'OLD_D_KBN'のデータとマッチしたら、l_m001の'L_KBN','D_KBN' のデータをl_001_recの'L_KBN','D_KBN'に更新します。 ・l_m001_recのデータとマッチしなかったら、マスタl_m002_recの 'OLD_L_KBN'とデータがマッチしたら、l_001_recの'L_KBN','D_KBN' にl_m002の'L_KBN','D_KBN'のデータを更新します。 以上のようにしたいのです。 よろしくお願いします。 |
|
投稿日時: 2007-11-19 22:09
投稿者はもう見ていないと思いますが
PL/SQLの変数は数値型でも初期値はNULLです l_match_flgに0を代入して初期化してください nullと0の比較結果はnullです 提示内容ではl_001_recの'L_KBN','D_KBN'に更新します と書いていますが l_001_recに代入しているのでl_001_recの'L_KBN','D_KBN'を更新する ということですよね |
1