トップページに戻る
次のmodel句のサンプルへ
前のmodel句のサンプルへ
model句15 until句は後判定繰り返し
SQLパズル
ITERATEとuntilを使ったときの処理順序に関する実験
処理1 ITERATION_NUMBERを宣言 (初期値=0)
処理2 rule適用
処理3 終了条件判定
処理4 ITERATION_NUMBERをインクリメント
処理5 処理2へ戻る
PL/SQL の反復制御構造(繰り返し処理)で表現したのが下記となります。
SQL
select soeji,Val from dual model dimension by (0 as soeji) measures (0 as Val)
rules ITERATE (5) UNTIL (ITERATION_NUMBER = 2) (Val[ITERATION_NUMBER] = ITERATION_NUMBER);
soeji Val
----- ---
0 0
1 1
2 2
declare
I_NUM pls_Integer := 0; -- 処理1 ITERATION_NUMBERを宣言 (初期値=0)
begin
LOOP
DBMS_Output.Put_Line(to_char(I_NUM)); -- 処理2 rule適用
exit when I_NUM = 2; -- 処理3 終了条件判定
I_NUM := I_NUM+1; -- 処理4 ITERATION_NUMBER++
end Loop; -- 処理5 処理2へ戻る
end;
/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
select soeji,Val from dual model dimension by (0 as soeji) measures (0 as Val)
rules ITERATE (5) UNTIL (1 = 1) (Val[ITERATION_NUMBER] = ITERATION_NUMBER);
soeji Val
----- ---
0 0
declare
I_NUM pls_Integer := 0; -- 処理1 ITERATION_NUMBERを宣言 (初期値=0)
begin
LOOP
DBMS_Output.Put_Line(to_char(I_NUM)); -- 処理2 rule適用
exit when 1 = 1; -- 処理3 終了条件判定
I_NUM := I_NUM+1; -- 処理4 ITERATION_NUMBER++
end Loop; -- 処理5 処理2へ戻る
end;
/
C#の構文では、この記述が近いと思います。
int ITERATION_NUMBER=0;
do
{
rule適用
} while(終了条件判定しつつ、後置インクリメントでITERATION_NUMBER++)