본문 바로가기
Database/Oracle

[ORACLE] INSERT() 기초부터 실전까지 : 초보 개발자를 위한 SQL 가이드

by Papa Martino V 2025. 6. 8.
728x90

오라클 INSERT() 기초부터 실전까지: 초보 개발자를 위한 SQL 가이드
[Oracle] INSERT

 

 

 

Oracle Database는 고성능 데이터베이스 시스템으로서, 다양한 방식의 데이터를 다루기 위한 SQL 구문을 지원합니다. 이 글에서는 데이터 입력의 핵심인 INSERT 문에 대해 설명하고, 개발자들이 실무에서 바로 사용할 수 있는 예제를 중심으로 정리하였습니다.

1. INSERT 문이란?

INSERT 문은 Oracle 데이터베이스 테이블에 새로운 레코드(행)를 추가할 때 사용하는 SQL 명령어입니다. 다음은 가장 기본적인 문법입니다.

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

2. 단일 행 삽입 예제

다음은 employees 테이블에 새로운 직원 정보를 추가하는 예입니다.

INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (207, 'LEE', 'JAEHUN', TO_DATE('2025-06-01', 'YYYY-MM-DD'), 5000);

3. 모든 칼럼에 값을 넣는 경우

모든 칼럼에 값을 입력할 때는 칼럼명을 생략할 수 있습니다.

INSERT INTO employees
VALUES (208, 'PARK', 'SOOJIN', TO_DATE('2025-06-02', 'YYYY-MM-DD'), 4500);

주의: 테이블에 정의된 칼럼 순서와 정확히 일치해야 하며, NOT NULL 제약 조건도 확인해야 합니다.

4. 날짜/문자/숫자 형식 주의사항

  • 날짜형: TO_DATE 함수 사용 (예: TO_DATE('2025-01-01', 'YYYY-MM-DD'))
  • 문자형: 홑따옴표(')로 감싸기
  • 숫자형: 따옴표 없이 입력

5. 서브쿼리를 이용한 INSERT

다른 테이블에서 데이터를 조회한 뒤 결과를 삽입할 수 있습니다.

INSERT INTO employees_backup (employee_id, first_name, last_name)
SELECT employee_id, first_name, last_name
FROM employees
WHERE department_id = 50;

6. INSERT ALL: 다중 행 다중 테이블 삽입

INSERT ALL 구문은 여러 테이블 또는 한 테이블에 다중 행을 한 번에 입력할 수 있는 기능입니다.

INSERT ALL
  INTO emp_log (emp_id, log_date) VALUES (101, SYSDATE)
  INTO audit_log (log_type, description) VALUES ('INSERT', 'New Employee')
SELECT * FROM dual;

7. INSERT FIRST: 조건별 분기 삽입

INSERT FIRST
  WHEN salary > 5000 THEN
    INTO high_salary_employees VALUES (employee_id, salary)
  WHEN salary <= 5000 THEN
    INTO low_salary_employees VALUES (employee_id, salary)
SELECT employee_id, salary FROM employees;

조건에 따라 다른 테이블로 데이터를 분기 삽입할 수 있습니다.

8. 시퀀스를 활용한 INSERT

오라클에서는 기본 키 생성을 위해 시퀀스를 자주 사용합니다.

INSERT INTO employees (
  employee_id, first_name, last_name, hire_date, salary)
VALUES (
  emp_seq.NEXTVAL, 'KIM', 'YUNA', SYSDATE, 5500);

9. INSERT + RETURNING INTO

입력과 동시에 생성된 값을 변수로 받을 수 있는 구문입니다. PL/SQL에서 자주 사용됩니다.

DECLARE
  v_id NUMBER;
BEGIN
  INSERT INTO employees (employee_id, first_name, salary)
  VALUES (emp_seq.NEXTVAL, 'SEO', 6000)
  RETURNING employee_id INTO v_id;
END;

10. INSERT 예외 처리와 트러블슈팅

  • ORA-00001: 고유 제약 조건 위반 – 이미 존재하는 PRIMARY KEY 사용 시 발생
  • ORA-01400: NOT NULL 칼럼에 NULL 입력 – 필수 칼럼 확인 필요
  • ORA-00947: 값 개수 불일치 – 칼럼 개수와 VALUES 개수 확인

11. 트랜잭션 관리

INSERT 작업 후 반드시 COMMIT 또는 ROLLBACK을 통해 트랜잭션을 마무리해야 합니다.

COMMIT; -- 데이터 확정 저장
ROLLBACK; -- 변경 내용 취소

12. INSERT 성능 팁

  • BULK INSERT 시 FORALL 또는 INSERT /*+ APPEND */ 힌트 활용
  • 로그 최소화를 위해 NOLOGGING 설정 고려
  • 대량 INSERT 전 인덱스 비활성화 후 재생성 검토

참고 출처

728x90