C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Oracle ストアドのループについて


(過去ログ 99 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■59014 / inTopicNo.1)  Oracle ストアドのループについて
  
□投稿者/ long (1回)-(2011/05/09(Mon) 12:13:57)

分類:[データベース全般] 

2011/05/09(Mon) 12:16:54 編集(投稿者)
初歩的な質問ですが、よろしくお願いいたします。

Oracleのストアドでデータをループし
ブレイクキーごとの値を集計し、集計値をInsertしています。
以下のようなコードを書いたのですが、ループ外で「集計値をInsert」が必要になります。
なんとかループ内の「集計値をInsert」で一緒に判定する方法はないでしょうか?

わかりにくい説明で申しわけありません。

OPEN カーソル変数
nSum := 0;
nKey := -1;
LOOP
    FETCH カーソル変数 INTO レコード格納変数;
    EXIT WHEN  カーソル変数%NOTFOUND;
    
    nSum := nSum + レコード格納変数.Suu;
    
    IF (nKey != -1 AND nKey != レコード格納変数.Key) THEN
        nKey := レコード格納変数.Key;
        集計値をInsert;
    END IF;
    
END LOOP;
    
集計値をInsert;

CLOSE カーソル変数;

引用返信 編集キー/
■59015 / inTopicNo.2)  Re[1]: Oracle ストアドのループについて
□投稿者/ shu (674回)-(2011/05/09(Mon) 12:28:05)
No59014 (long さん) に返信

Oracleの構文はよくわかりませんが、

> EXIT WHEN カーソル変数%NOTFOUND;
EXITしないで何らかの変数にこの状態を設定(仮にNFD = 1とする)


> nSum := nSum + レコード格納変数.Suu;
NFD = 1の状態であれば実行しない


> IF (nKey != -1 AND nKey != レコード格納変数.Key) THEN
この条件に or でNFD =1のときの条件を追加

で出来るかと思います。

提示された書き方の方が分かりやすいと思います。Loop外の集計値をInsertにも
なんらかの条件はあったほうがよいとは思いますが。
引用返信 編集キー/
■59033 / inTopicNo.3)  Re[2]: Oracle ストアドのループについて
□投稿者/ やじゅ (1896回)-(2011/05/10(Tue) 00:52:58)
やじゅ さんの Web サイト
2011/05/10(Tue) 01:02:47 編集(投稿者)
> ■No59014 (long さん) に返信

未検証ですが、おおまかにこんな感じってことで。

RET_TRUE	NUMBER := 1;
RET_FALSE	NUMBER := 0;

nSum := 0;
nKey := -1;
nCnt := 0;
nFlg := RET_FALSE;

OPEN  カーソル変数;
LOOP
	FETCH カーソル変数 INTO レコード格納変数;
	IF nCnt = 0 AND カーソル変数%NOTFOUND THEN EXIT; END IF;

	IF カーソル変数%FOUND THEN

		nSum := nSum + レコード格納変数.Suu;

		IF (nKey != -1 AND nKey != レコード格納変数.Key) THEN
			nKey := レコード格納変数.Key;
			nFlg := RET_TRUE;
		END IF;
	END IF;

	IF nFlg = RET_TRUE OR カーソル変数%NOTFOUND THEN
		集計値をInsert;
		nFlg := RET_FALSE;
	END IF;

	nCnt := nCnt + 1;

	IF カーソル変数%NOTFOUND THEN EXIT; END IF;
END LOOP;
CLOSE  カーソル変数;

引用返信 編集キー/
■59044 / inTopicNo.4)  Re[3]: Oracle ストアドのループについて
□投稿者/ long (2回)-(2011/05/10(Tue) 13:04:37)
やじゅ様
希望通りの動作にすることができました。
ありがとうございます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -