DB2와 ORACLE의 가상 테이블 비교 (DUAL vs SYSDUMMY1)
**가상 테이블(Virtual Table)**은 물리적으로 존재하지 않지만, 특정 목적을 위해 제공되는 논리적인 테이블입니다.
DB2와 Oracle에서 주로 사용하는 가상 테이블을 비교하면 다음과 같습니다.
1. ORACLE: DUAL 테이블
- 역할: 오라클에서 하나의 행과 하나의 열을 가진 특수한 테이블로, 함수 호출이나 연산 결과를 반환할 때 사용됩니다.
- 구성: 단일 행(1 row)과 단일 열(1 column)로 이루어짐.
- 사용 목적: 단순한 SELECT 문에서 연산 수행, 시스템 함수 호출 등에 사용.
- 실제 존재: DUAL은 실제 테이블이며, SYS 스키마에 존재함.
예제
SELECT SYSDATE FROM DUAL; -- 현재 날짜 조회
SELECT 1+1 FROM DUAL; -- 연산 수행
SELECT UPPER('hello') FROM DUAL; -- 문자열 함수 실행
2. DB2: SYSIBM.SYSDUMMY1 테이블
- 역할: 오라클의 DUAL과 유사한 기능을 수행하는 IBM Db2의 가상 테이블.
- 구성: 단일 행을 가지며, 여러 시스템 관련 함수 조회에 사용됨.
- 사용 목적: 날짜, 시간, 함수 호출 등을 수행할 때 사용됨.
- 실제 존재: SYSIBM 스키마에 존재하는 시스템 테이블.
예제
SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1; -- 현재 날짜 조회
SELECT 1+1 FROM SYSIBM.SYSDUMMY1; -- 연산 수행
SELECT UPPER('hello') FROM SYSIBM.SYSDUMMY1; -- 문자열 함수 실행
참고: SYSIBM.DUAL이 일부 DB2 버전에서 제공될 수 있지만, 일반적으로 SYSIBM.SYSDUMMY1을 사용하는 것이 표준입니다.
3. DB2에서 DUAL 없이 실행하는 방법
DB2에서는 굳이 DUAL 또는 SYSDUMMY1을 사용하지 않고도 VALUES 구문을 사용하여 동일한 작업을 수행할 수 있습니다.
예제
VALUES CURRENT DATE; -- 현재 날짜 조회
VALUES 1+1; -- 연산 수행
VALUES UPPER('hello'); -- 문자열 함수 실행
이 방식은 더 간단하고 FROM 절 없이 바로 값을 반환할 수 있다는 장점이 있습니다.
4. DUAL과 SYSDUMMY1의 차이점 요약
특징 ORACLE DUAL DB2 SYSIBM.SYSDUMMY1
역할 | 단순한 조회를 위한 가상 테이블 | 단순한 조회를 위한 가상 테이블 |
위치 | SYS.DUAL | SYSIBM.SYSDUMMY1 |
행 개수 | 1행 (1 Row) | 1행 (1 Row) |
일반적인 사용법 | SELECT ... FROM DUAL; | SELECT ... FROM SYSIBM.SYSDUMMY1; |
대체 방법 | 없음 | VALUES 구문 사용 가능 |
5. 결론
- Oracle에서는 DUAL 테이블을 사용하여 가상 조회를 수행하지만,
Db2에서는 SYSIBM.SYSDUMMY1을 사용하거나 VALUES 구문을 활용할 수 있습니다. - Db2에서는 FROM SYSIBM.SYSDUMMY1을 생략해도 VALUES 구문을 이용하면 동일한 결과를 얻을 수 있습니다.
- 최신 Db2 버전에서는 DUAL 테이블이 존재하지 않을 수도 있으며, SYSDUMMY1을 사용하는 것이 표준입니다.
따라서 Oracle에서 DUAL을 사용했던 방식 그대로 Db2에서 적용하려면 SYSIBM.SYSDUMMY1을 쓰거나, 더 간단하게 VALUES 구문을 활용하는 것이 좋습니다. 🚀
'[DB]SQL실무' 카테고리의 다른 글
[기타]SQLSTATE=22001 오류 (0) | 2025.04.15 |
---|---|
[SQL]WITH 절의 장점 VS 단점 (0) | 2025.03.18 |
[SQL]WITH 절 (1) | 2025.03.18 |
[SQL]Agent stack size 에러 (0) | 2025.03.18 |
DBMS별 숫자 형변환 함수 예시 (0) | 2025.03.07 |