トップページに戻る    次のmodel句のサンプルへ    前のmodel句のサンプルへ

model句06 all_objectsやall_catalogやdictの代用

SQLパズル

1から5までの自然数を出力する。

出力結果
No
--
 1
 2
 3
 4
 5


SQL

select soeji
  from dual
 model
 dimension by (1 as soeji)
 measures(0 as dummy)
 rules iterate (5) (dummy[iteration_number+1] = 0);


解説

iteration_numberは、0から開始されるのです。

プログラム言語のfor文のループ変数でよく使われるiは、
iterationの頭文字が由来らしい・・・

マニュアル(iteration_number)
マニュアル(iteration_number)(英語)

10-172 dual表からの連番の作成

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
rules iterate を使わずに、for文で代用することもできます。

select soeji
  from dual
 model
 dimension by(1 as soeji)
 measures(0 as dummy)
 rules(
 dummy[for soeji from 1 to 5 increment 1]= 0);

soeji
-----
    1
    2
    3
    4
    5

-- 日付型バージョン1
select m
  from dual
 model
 dimension by(0 as soeji)
 measures(date '2009-03-01' as m)
 rules(
 m[for soeji from 0 to 5 increment 1]=m[0]+cv(soeji));

M
--------
09-03-01
09-03-02
09-03-03
09-03-04
09-03-05
09-03-06

-- 日付型バージョン2
select soeji
  from dual
 model
 dimension by(date '2009-03-01' as soeji)
 measures(0 as dummy)
 rules(
 dummy[for soeji from '2009-03-01' to '2009-03-05' INCREMENT INTERVAL '1' day]=0);

-- 日付型バージョン3
select soeji
  from dual
 model
 dimension by(date '2009-03-01' as soeji)
 measures(0 as dummy)
 rules(
 dummy[for soeji from '2009-03-01' to '2009-03-05' INCREMENT 1]=0);

10-309 model句のforループでのinterVal型指定