사내 솔루션은 Oracle, MySQL, PostgreSQL, MS-SQL 모든 데이터베이스가 호환된다고 당당하게 말씀하시는 것을 들었는데, 로컬에서 MS-SQL로 마이그레이션 하던 도중 만난 예외... (지금 사내 솔루션을 까고 있는 것이다.) 오늘은 존재하지 않는 테이블이라며 예외가 뜨는 DUAL이 무엇인지에 대해 알아볼 것이다.
DUAL 테이블이란?
DUAL 테이블은 Oracle에서 기본적으로 생성되는 특수 테이블이다. 단일 행과 단일 열을 가진 테이블로, DUMMY라는 요소 하나만을 저장하고 있다. 이것만으로도 알 수 있겠지만, DUAL 테이블은 간단한 연산이나 시스템 함수 호출 등이 필요할 때 임의적으로 부르는 더미 테이블이란 것이다.
DUAL 테이블 사용 방법
SELECT 1 + 1; -- Others
1 + 1 연산을 조회하는 쿼리문을 작성하고자 한다. 다른 데이터베이스들에 DUAL 테이블이 없는 이유는 바로 이것. 다른 데이터베이스들은 FROM문 없이도 SELECT문이 동작하기 때문이다. 하지만 Oracle은 어떻게 될까?
ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
FROM 키워드가 필요한 위치에 없다는 ORA-00923 예외를 반환한다. 이 예외를 방지하기 위하여 테이블이 굳이 필요하지 않은 상황에서 임의의 테이블을 불러오려 DUAL이라는 더미 테이블을 사용하는 것이다.
SELECT 1 + 1
FROM DUAL; -- Oracle
Oracle은 이와 같이 DUAL이란 더미 테이블을 붙여줌으로서 테이블이 필요 없는 간단한 연산이나 시스템 함수 호출 등을 수행할 수 있다.
알아두어야 할 것은 Oracle에서만 DUAL 테이블이 필요하고, 나머지 데이터베이스들은 테이블의 요소를 참조하지 않는 이상 굳이 FROM문이 필수가 아니라는 것이다. 이로서 어디서 예외를 발생시키는지 알고 피해보자!
'데이터베이스 > SQL' 카테고리의 다른 글
[MS-SQL] SQL Server 설치 및 DBeaver 연동 (3) | 2024.11.05 |
---|---|
데이터베이스 명명 규칙 (약어 사용 규칙) (0) | 2024.07.22 |
[MySQL] Sql Error 1264 Out of range value for column 'col_name' (0) | 2024.07.15 |
DB, DBMS, RDBMS, NoSQL (0) | 2024.07.11 |
[Oracle] DCL, TCL (0) | 2024.07.10 |