連番を生成する SELECT文(階層問い合わせ+LEVEL疑似列)
ちょっとした疑似レコードをSELECTだけで簡単に作れるので、非常に便利です。
階層問い合わせ(CONNECY BY〜) と LEVEL疑似列を使用します。
Oracle Database SQL言語リファレンス 11gリリース2 (11.2) B56299-06 LEVEL疑似列 http://docs.oracle.com/cd/E16338_01/server.112/b56299/pseudocolumns001.htm#i1009261
以下は実行例です。
-- 10g以降 SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 10; LEVEL ---------- 1 2 3 4 5 6 7 8 9 10 10 rows selected.
9iR2以前は↓のSQLを実行します。
-- 9iR2以前 SELECT LEVEL FROM DUAL A, DUAL B CONNECT BY A.DUMMY = B.DUMMY AND LEVEL <= 10; LEVEL ---------- 1 2 3 4 5 6 7 8 9 10 10 rows selected.
下記のように日付を生成したり、応用は色々効きまくり(`・ω・)Ъ
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS'; SELECT TRUNC(SYSDATE, 'DD') + LEVEL - 1 AS WEEKLY_DAY FROM DUAL CONNECT BY LEVEL <= 7; WEEKLY_DAY ------------------- 2014/06/30 00:00:00 2014/07/01 00:00:00 2014/07/02 00:00:00 2014/07/03 00:00:00 2014/07/04 00:00:00 2014/07/05 00:00:00 2014/07/06 00:00:00 7 rows selected.