ここから本文です

データベースのPL/SQLのfetchの使い方を教えてください

tok********さん

2012/3/2301:59:30

データベースのPL/SQLのfetchの使い方を教えてください

閲覧数:
1,365
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nob********さん

編集あり2012/3/2318:11:22

テーブルを1行単位に処理しなければならない場合に使用します、つまり前の行の処理結果により次の行の処理結果が異なる場合です。
したがって、ほとんど使う事はありませんが、私の場合所要量から在庫量を引き当てて発注量を計算するのに使いました。
簡単なPL/SQLを作ってみましたので、参考にして下さい。

CREATE TABLE 在庫量(品目 CHAR(9),在庫量 INT);
INSERT INTO 在庫量 VALUES('A',500);
INSERT INTO 在庫量 VALUES('C',700);
CREATE TABLE 所要量(品目 CHAR(9),年月日 CHAR(8),所要量 INT);
INSERT INTO 所要量 VALUES('A','20120203','300');
INSERT INTO 所要量 VALUES('A','20120204','400');
INSERT INTO 所要量 VALUES('B','20120205','500');
INSERT INTO 所要量 VALUES('C','20120206','600');
CREATE TABLE 発注量(品目 CHAR(9),年月日 CHAR(8),発注量 INT);

DECLARE
S 所要量%ROWTYPE;
Z 在庫量%ROWTYPE;
CURSOR C IS SELECT * FROM 所要量 ORDER BY 1,2;
BEGIN
Z.品目:=' ';
Z.在庫量:=0;
OPEN C;
LOOP
FETCH C INTO S;
EXIT WHEN C%NOTFOUND;
IF Z.品目!=S.品目 THEN
BEGIN
SELECT 品目,在庫量 INTO Z.品目,Z.在庫量 FROM 在庫量
WHERE 品目=S.品目;
EXCEPTION
WHEN NO_DATA_FOUND THEN
Z.品目:=S.品目;
Z.在庫量:=0;
END;
END IF;
IF Z.在庫量<S.所要量 THEN
S.所要量:=S.所要量-Z.在庫量;
Z.在庫量:=0;
INSERT INTO 発注量(品目,年月日,発注量)
VALUES(S.品目,S.年月日,S.所要量);
ELSE
Z.在庫量:=Z.在庫量-S.所要量;
END IF;
END LOOP;
CLOSE C;
END;

結果:発注量

品目 年月日 発注量
A 2012-02-04 200
B 2012-02-05 500

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる