개발을 하다 보면 특정 개수의 행을 임의로 생성해야 할 때가 있어요.
예를 들면,
✅ 테스트 데이터 생성
✅ 샘플 쿼리 실행
✅ 특정 패턴의 데이터를 반복해서 출력해야 하는 경우
이럴 때 오라클의 DUAL 테이블을 활용하면 간단하게 원하는 개수만큼 데이터를 만들 수 있습니다.
특히 CONNECT BY LEVEL을 활용하면 코드 몇 줄만으로 자유롭게 행 개수를 조절할 수 있지요.
오늘은 DUAL 테이블을 활용한 다양한 행 생성 방법을 소개해볼게요!
💡 DUAL 테이블이란?
오라클의 DUAL 테이블은 오직 한 개의 행과 한 개의 컬럼만을 가진 가상의 테이블이에요.
주로 간단한 연산을 수행할 때 많이 사용되죠.
예를 들어, 아래처럼 DUAL을 활용하면 연산 결과만 깔끔하게 조회할 수 있습니다.
SELECT 10 * 5 FROM DUAL;
결과는 50개의 행이 출력됩니다
원래 테이블에서 데이터를 가져오지 않고, 단순한 값을 출력하고 싶을 때 DUAL을 사용하면 편리해요.
하지만 이 DUAL 테이블을 살짝 변형하면 다중 행을 만들 수도 있습니다. 그 방법을 지금부터 알아볼게요! 🔥
- 1. CONNECT BY LEVEL을 활용한 행 생성
가장 간단하면서도 강력한 방법은 CONNECT BY LEVEL을 활용하는 것입니다.
SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL <= 10;
결과는 아래와 같이 보여지게 됩니다.
LEVEL
-----
1
2
3
4
5
6
7
8
9
10
LEVEL은 오라클 계층 쿼리에서 자동으로 증가하는 값,
CONNECT BY LEVEL <= N 조건을 설정하면 N개의 행을 생성할 수 있어요.
즉, 이 방식으로 원하는 개수만큼 행을 자유롭게 생성 가능! 🎯
- 2. ROWNUM을 활용한 행 생성
LEVEL 대신 ROWNUM을 활용해서도 다중 행을 만들 수 있어요.
SELECT ROWNUM
FROM DUAL
CONNECT BY ROWNUM <= 10;
ROWNUM을 활용하는 방식이지만, LEVEL을 쓰는 방식이 더 일반적이라 실무에서는 CONNECT BY LEVEL을 더 많이 사용해요.
- 3. 서브쿼리를 이용한 행 생성
이 방법은 DUAL을 직접 반복 호출하는 방식이에요
SELECT ROWNUM
FROM (SELECT 1 FROM DUAL CONNECT BY LEVEL <= 10);
여기서 DUAL을 CONNECT BY LEVEL과 함께 서브쿼리로 감싸주면 조금 더 유연하게 활용할 수 있어요.
- 4. CROSS JOIN을 활용한 대량 행 생성
만약 엄청 많은 행을 한 번에 만들어야 한다면?
이럴 때는 CROSS JOIN을 활용하는 것도 좋은 방법이에요.
SELECT ROWNUM
FROM DUAL, (SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 10);
DUAL 테이블을 CROSS JOIN 형태로 조합하면 더 많은 행을 생성 가능합니다.
💡 대량 데이터 생성이 필요할 때 유용하지만, 성능 이슈가 있을 수 있으니 주의하세요!
- 5. PL/SQL을 활용한 동적 행 생성
만약 N개의 행을 동적으로 생성하고 싶다면?
PL/SQL을 활용할 수도 있어요!
DECLARE
v_count NUMBER := 10;
BEGIN
FOR i IN 1..v_count LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
/
이 방식은 PL/SQL 환경에서 활용 가능,
반복문을 사용해 동적으로 개수를 조절할 수 있음
하지만 일반적인 SQL 쿼리보다는 활용도가 낮아요.
오늘은 오라클 DUAL 테이블을 활용해 원하는 개수만큼 행을 생성하는 방법을 알아봤어요.
🔹 가장 많이 쓰는 방법은 CONNECT BY LEVEL 활용하기!
🔹 ROWNUM, CROSS JOIN, PL/SQL을 활용하면 더 다양한 방식으로 응용 가능
🔹 실무에서는 테스트 데이터 생성, 날짜 리스트 만들기 등에 자주 활용됨
이 방법을 잘 활용하면 SQL 작성이 훨씬 편해질 거예요!
꼭 연습해 보세요! 🎯
#오라클 #오라클dual #dual테이블활용 #오라클rownum #오라클행갯수
'SQL' 카테고리의 다른 글
오라클(Oracle DB) 개발 시 반드시 알아야 할 내용(MySQL, MSSQL와 차이점) (0) | 2025.03.06 |
---|---|
오라클 쿼리 부하 테스트 (0) | 2025.03.06 |
[PostgreSQL] current transaction is aborted, commands ignored until end of transaction block (0) | 2023.11.01 |
[POSTGRESQL] null to 0 으로 치환하기 (0) | 2023.02.16 |
[SQL] POSTGRES SQL ->>, ->가 뭔가요? (0) | 2022.12.21 |
댓글