トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

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

SQLパズル

dualテーブルから1から10までの連番を作成する。

出力結果
Val
---
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10

こちらを参考にさせていただきました(英語)


SQL

--■■■cubeとgrouping_IDを使う方法■■■
select Row_Number() over(order by 1) as Val
  from dual
group by cube(1,2,3,4)
having grouping_ID(1,2,3,4) <= 10-1;

--■■■表関数を使う方法■■■
create or replace Package Pack10_172 Is
    type makeRenbanSet is table of number;
end;
/

create or replace function FmakeRenban(PmaxRenban number)
return Pack10_172.makeRenbanSet PipeLined is
begin
    for I in 1..PmaxRenban Loop
        pipe row(I);
    end loop;
end;
/

create or replace view Renban10 as
select RowNum as Val from table(FmakeRenban(10));

select * from Renban10;


解説

リンク先のUS-OTNのスレッドによると
select RowNum
  from dual
connect by Level <= 10;
は、サポートしてないとかしてるとか

Oracle Database SQLリファレンス 10g リリース2 階層問合せ演算子
>階層問合せでは、
>CONNECT BY condition内の1つの式をPRIOR演算子で修飾する必要があります。

Oracle Database SQL Reference 10g Release 2 (10.2) Hierarchical Query Operators
>In a hierarchical query,
>one expression in the CONNECT BY condition must be qualified by the PRIOR operator.

2-3-9 自然数の連番を持つ集合を作成
3-32 Grouping_ID関数

model句06 all_objectsやall_catalogやdictの代用