dポイントプレゼントキャンペーン実施中!

P/L SQLで値が更新されない。
次のようなプログラムを作成しましたが、ORDER_INFテーブルのKANRYO_DAYの値が更新されません。どこが間違っているのでしょうか。
BEGIN
DECLARE
CURSOR r_search IS SELECT * FROM ord_search_pattern;
BEGIN
FOR r IN r_search LOOP
UPDATE ORDER_INF t1
SET t1.KANRYO_DAY = r.KANRYO_DAY
WHERE t1.ORDER_NO = r.ORDER_NO;
COMMIT;
END LOOP;
END;

A 回答 (2件)

ただのコピペのミスかもしれませんが、とりあえず1行目のBEGINはいらないです。


と言うかあるとエラーになって実行できないですよね。
プログラム的には間違ってないと思います。
ORDER_NOが一致するデータがないか、KANRYO_DAYの値が同一とかですかね。
LOOP内でdbms_outputなどをつかってデバッグしてみては?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
プログラムに自信がなかったので、データを調べてみます。

お礼日時:2010/08/27 09:07

SQL> create table ord_search_pattern


2 (
3 ORDER_NO varchar2(5),
4 KANRYO_DAY varchar2(8)
5 );

表が作成されました。

SQL> create table ORDER_INF
2 (
3 ORDER_NO varchar2(5),
4 KANRYO_DAY varchar2(8)
5 );

表が作成されました。

SQL> insert into ord_search_pattern values('A','20100820');

1行が作成されました。

SQL> insert into ORDER_INF values('A',null);

1行が作成されました。

SQL> select * from ord_search_pattern ;

ORDER KANRYO_D
----- --------
A 20100820

SQL> select * from ORDER_INF ;

ORDER KANRYO_D
----- --------
A

SQL>
SQL> DECLARE
2 CURSOR r_search IS SELECT * FROM ord_search_pattern;
3 BEGIN
4 FOR r IN r_search LOOP
5 UPDATE ORDER_INF t1
6 SET t1.KANRYO_DAY = r.KANRYO_DAY
7 WHERE t1.ORDER_NO = r.ORDER_NO;
8 COMMIT;
9 END LOOP;
10 END;
11 /

PL/SQLプロシージャが正常に完了しました。

SQL> select * from ord_search_pattern ;

ORDER KANRYO_D
----- --------
A 20100820

SQL> select * from ORDER_INF ;

ORDER KANRYO_D
----- --------
A 20100820

更新されますが?
データの整合性の問題では?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
プログラムは、間違っていないのですね。
データを調べてみます。

お礼日時:2010/08/27 09:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!