하나의 행을 여러행으로 복제, LEVEL… CONNECT BY

■ 하나의 행(레코드)을 여러행으로 복제(?)할 경우가 있다. 이 경우 LEVEL… CONNECT BY를 써보자. 아래의 코드는 1부터 3까지 3행을 리턴한다.

SELECT LEVEL AS LVL FROM DUAL CONNECT BY LEVEL <=3;


 
 
 

■ 아래 BASE테이블의 데이터를 3배로 뻥튀기하는 예제

WITH BASE AS (
  SELECT 'A1' AS NAME FROM DUAL UNION ALL
  SELECT 'A2' AS NAME FROM DUAL UNION ALL
  SELECT 'A3' AS NAME FROM DUAL
)
SELECT *
  FROM BASE
     , (SELECT LEVEL AS LVL
          FROM DUAL
         WHERE 1=1
       CONNECT BY LEVEL <=3
       ) X
 ORDER BY
       NAME
     , X.LVL