여러 개의 INSERT문을 한 번에 처리

    먼저 실습을 위한 대상 테이블을 만들어 보자.

    입력

        CREATE TABLE ex7_3 (
               emp_id    NUMBER,
               emp_name  VARCHAR2(100));
    

    결과

        table ex7_3이(가) 생성되었습니다.
    

    입력

        CREATE TABLE ex7_4 (
               emp_id    NUMBER,
               emp_name  VARCHAR2(100));
    

    결과

        table EX7_4이(가) 생성되었습니다.
    

    ex7_3 테이블에 두 개의 로우를 입력해야 한다면 다음과 같이 두 개의 INSERT문을 사용하면 된다.

    입력

        INSERT INTO ex7_3 VALUES (101, '홍길동');
    

    결과

        1개 행 이(가) 삽입되었습니다.
    

    입력

        INSERT INTO ex7_3 VALUES (102, '김유신');
    

    결과

        1개 행 이(가) 삽입되었습니다.
    

    하지만 다음과 같이 INSERT ALL 구문을 사용하면 한 번에 여러 개의 로우를 입력할 수 있다.

    입력

        INSERT ALL
          INTO ex7_3 VALUES (103, '강감찬')
          INTO ex7_3 VALUES (104, '연개소문')
        SELECT *
          FROM DUAL;
    

    결과

        2개 행 이(가) 삽입되었습니다.
    

    다중 테이블 INSERT 구문을 사용할 때 반드시 서브 쿼리가 동반되어야 하므로 위 쿼리에서는 맨 마지막에 의미 없는 DUAL을 선택하도록 했다. 다음과 같이 문장을 작성해도 위와 동일한 결과를 얻을 수 있다.

    입력

        INSERT ALL
          INTO ex7_3 VALUES (emp_id, emp_name)
        SELECT 103 emp_id, '강감찬' emp_name
          FROM DUAL
         UNION ALL
        SELECT 104 emp_id, '연개소문' emp_name
          FROM DUAL;
    

    결과

        2개 행 이(가) 삽입되었습니다.
    

    이처럼 다중 테이블 INSERT 구문은 여러 개의 INSERT문을 한 문장으로 처리할 수 있기도 하지만, 이와 동시에 여러 개의 테이블에 INSERT를 수행할 수도 있다. 이번에는 ex7_3 뿐만 아니라 ex7_4 테이블에도 데이터를 넣어 보자.

    입력

        INSERT ALL
          INTO ex7_3 VALUES (105, '가가가')
          INTO ex7_4 VALUES (105, '나나나')
        SELECT *
          FROM DUAL;
    

    결과

        2개 행 이(가) 삽입되었습니다.
    

    두 테이블의 데이터를 확인해 보면 데이터가 정상적으로 입력된 것을 볼 수 있다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.