본문 바로가기
DataBase/Oracle

[Oracle] 오라클 INSERT 방법 및 예제 (신규 데이터 생성)

by 알쓸전잡 2025. 7. 31.
반응형

오라클을 사용할 때 알고 있지만 한 번씩 헷갈리는 INSERT 사용 방법을 예제와 같이 알려드리겠습니다.

오라클 기본 INSERT 문
오라클 기본 INSERT 문

 

INSERT문 기본 사용 방법
INSERT INTO DEPT
        ( DEPTNO
        , DNAME
        , LOCATION
        )
    VALUES
        ( '50'
        , 'BUSINESS'
        , 'BUSAN'
        )

 

INSERT INTO [테이블 명] ( [컬럼1], [컬럼2], ...... ) VALUES ( [값1], [값2], ...... )

 

위의 예제가 INSERT를 하기 위한 기본 방법으로 INTO 안에 명시한 컬럼과 VALUES 안에 입력한 데이터 값의 개수가 일치해야 합니다. INTO 절의 컬럼은 경우에 따라 생략도 가능하지만 테이블 속성이 변경되는 경우가 있으므로 유지보수를 위해 컬럼을 명시해 주시길 바랍니다.

 

컬럼 생략, 값만 입력
INSERT INTO DEPT
    VALUES
        ( '50'
        , 'BUSINESS'
        , 'BUSAN'
        )

DEPT 테이블 상세정보
DEPT 테이블 상세정보

 

테이블 전체 컬럼에 대한 값을 입력한다면 컬럼명을 생략할 수 있습니다.

앞서 언급했듯 유지보수 측면에서는 좋지 않으니 일회성으로 사용하면 편리합니다.

 

만약 컬럼명을 생략한 경우 아래와 같이 값을 하나라도 빠트리게 된다면 ORA-00947 오류가 발생합니다.

※ 다른 예제에서 오류 발생화면 첨부

 

SELECT 를 사용한 INSERT 방법
INSERT INTO EMP A
        ( EMPNO
        , ENAME
        , JOB
        , MGR
        , HIREDATE
        , SAL
        , COMM
        , DEPTNO
        )
SELECT 8000
     , B.ENAME
     , B.JOB
     , B.MGR
     , B.HIREDATE
     , B.SAL
     , B.COMM
     , B.DEPTNO
    FROM EMP B
    WHERE B.ENAME = 'SCOTT'

 

VALUES 대신에 SELECT 로 값을 조회해서 입력하면 됩니다.

기존 테이블에서 값을 불러와서 입력하거나 대량으로 입력하는 경우 편리합니다.

 

INSERT INTO EMP A
SELECT 8000
     , B.ENAME
     , B.JOB
     , B.MGR
     , B.HIREDATE
     , B.SAL
     , B.COMM
     , B.DEPTNO
    FROM EMP B
    WHERE B.ENAME = 'SCOTT'

 

마찬가지로 테이블 전체 컬럼 순서와 값에 맞게 SELECT 로 모든 값을 명시해 준다면 컬럼 선언을 생략할 수 있습니다.

 

만약 SELECT 문에서 값이 하나라도 맞지 않는다면 아래 예시와 같이 ORA-00947 오류가 발생합니다.

ORA-00947 오류
컬럼을 생략한다면 값을 전부 맞춰야 합니다.

 

특정 컬럼만 입력하는 방법
INSERT INTO EMP A
        ( ENAME
        , JOB
        , MGR
        , HIREDATE
        , SAL
        , COMM
        , DEPTNO
        )
SELECT B.ENAME
     , B.JOB
     , B.MGR
     , B.HIREDATE
     , B.SAL
     , B.COMM
     , B.DEPTNO
    FROM EMP B
    WHERE B.ENAME = 'SCOTT'

INSERT 실행 결과
INSERT 실행 결과
EMP 테이블 속성
EMP 테이블

 

Not Null 속성이 설정된 컬럼인데 Default 값이 지정되지 않은 경우가 아니라면 컬럼 목록에 명시하지 않고 입력할 값도 생략할 수 있습니다. 컬럼을 생략하는 경우 생략된 부분은 Null 값으로 입력됩니다.

 

개발을 해야 할 때 필요한 컬럼의 값만 입력하고 싶다면 기본 문법처럼 컬럼을 명시하고 값을 입력하면 유지보수가 편리해집니다. 

 

서브쿼리를 사용하여 INSERT 하는 방법
INSERT INTO EMP A 
        ( EMPNO
        , ENAME
        , JOB
        , MGR
        , HIREDATE
        , SAL
        , COMM
        , DEPTNO
        )
     VALUES 
        ( (SELECT MAX(EMPNO) + 1 FROM EMP B) -- 값에 서브쿼리 사용 가능
--        , (SELECT NVL(MAX(EMPNO),0) + 1 FROM EMP B) --MAX 값이 없는 경우 0으로 적용해서 1부터 채번
        , 'LEE'
        , 'CLERK'
        , 7839
        , TO_DATE('1996/12/12', 'YYYY/MM/DD')
        , 4000
        , NULL
        , 40
        )

 

위의 예제는 EMPNO의 최대값을 구하여 +1 된 값을 채번 하여 입력하는 방법입니다.

PK 구분을 위한 채번의 경우 시퀀스를 사용하면 더 좋지만 간단한 로직이라면 이렇게만 사용해도 됩니다.

 

채번을 예시로 들었지만 다른 방법으로 서브쿼리를 사용하여 값을 입력해도 됩니다.

반응형