ORA-00957: 열명이 중복되었습니다 오류는 테이블 또는 뷰 생성 시 컬럼명이 중복되었을 때 발생합니다. 원인은 크게 다음과 같습니다.
- 컬럼 개수가 많은 테이블에 추가로 동일한 이름의 컬럼을 추가하는 경우
- 외래키를 동일한 컬럼명으로 사용 시 해당 두 테이블을 조인하여 테이블 및 뷰를 생성하는 경우
다음은 똑같은 컬럼명을 사용하여 오류가 발생하는 예제 자료입니다. column_name_1 컬럼명이 중복되어 발생합니다.
CREATE TABLE TABLE_NAME
(
COLUMN_NAME_1 VARCHAR2 (100),
COLUMN_NAME_2 VARCHAR2 (100),
COLUMN_NAME_3 VARCHAR2 (100),
COLUMN_NAME_4 VARCHAR2 (100),
COLUMN_NAME_1 VARCHAR2 (100)
);
COLUMN_NAME_1 VARCHAR2 (100)
*
ERROR at line 7:
ORA-00957: duplicate column name
ORA-00957: 열명이 중복되었습니다
emp(사원정보) 테이블과 dept(부서정보) 테이블 간의 외래키는 deptno(부서번호) 컬럼이며, 해당 두 테이블 모두 각각 deptno컬럼을 같은 이름으로 가지고 있습니다. 즉, emp테이블에도 deptno가 있고, dept테이블에도 deptno가 있습니다.
이때 emp테이블과 dept테이블을 조인하여 emp.deptno와 dept.deptno을 모두 조회하는 상황을 가정해 봅시다. 중복된 컬럼을 조회하는 예제는 다음과 같으며 SELECT 컬럼명은 애플리케이션 툴에 따라 deptno, deptno로 보이기도 하고 deptno, deptno_1과 같은 식으로 보이기도 합니다. sqlplus는 동일한 컬럼 이름을 표시해 드립니다.
SELECT EMPNO,
ENAME,
EMP.DEPTNO,
DEPT.DEPTNO
FROM EMP LEFT JOIN DEPT ON DEPT.DEPTNO = EMP.DEPTNO;
EMPNO ENAME DEPTNO DEPTNO
---------- -------------------- ---------- ----------
7839 KING 10 10
7698 BLAKE 30 30
7782 CLARK 10 10
7566 JONES 20 20
7654 MARTIN 30 30
7499 ALLEN 30 30
7844 TURNER 30 30
7900 JAMES 30 30
7521 WARD 30 30
7902 FORD 20 20
7369 SMITH 20 20
7788 SCOTT 20 20
7876 ADAMS 20 20
7934 MILLER 10 10
14 rows selected.
이렇게 컬럼이 중복된 상태에서 테이블 또는 뷰를 생성한다면 중복된 열명 오류가 발생합니다.
ORA-00957 오류는 중복된 컬럼을 빼거나 하나의 컬럼명을 달리 설정하여 해결할 수 있습니다.
CREATE TABLE TABLE_NAME
AS
SELECT EMPNO,
ENAME,
EMP.DEPTNO,
DEPT.DEPTNO
FROM EMP LEFT JOIN DEPT ON DEPT.DEPTNO = EMP.DEPTNO;
DEPT.DEPTNO
*
ERROR at line 6:
ORA-00957: duplicate column name