본문 바로가기
Database

[ Oracle] 오라클 UPDATE() 기본 문법부터 실전 예제까지 완전 정리

by 코드개미 2025. 6. 8.

오라클 UPDATE() 기본 문법부터 실전 예제까지 완전 정리
[Oracle] UPDATE

 

 

 

Oracle Database에서 데이터를 수정하려면 UPDATE 문을 사용합니다. 본 글에서는 UPDATE 문법의 기본부터 실무에서 자주 사용되는 다양한 예제까지 상세히 설명합니다. 초보 개발자뿐 아니라 실무자도 바로 활용할 수 있도록 구성했습니다.

1. UPDATE 문이란?

UPDATE 문은 테이블 내 기존 데이터를 변경하는 데 사용하는 SQL 구문입니다. 데이터를 삽입하는 INSERT, 삭제하는 DELETE와 함께 DML(Data Manipulation Language)의 핵심입니다.

기본 문법

UPDATE 테이블명
SET 컬럼1 = 값1, 컬럼2 = 값2
WHERE 조건;

WHERE 절이 없다면 테이블 전체가 수정되므로 주의해야 합니다.

2. 단일 행 업데이트 예제

UPDATE employees
SET salary = 6000
WHERE employee_id = 101;

사 번이 101인 직원의 급여를 6,000으로 수정합니다.

3. 다중 칼럼 업데이트 예제

UPDATE employees
SET salary = 7000, department_id = 60
WHERE employee_id = 102;

사 번이 102인 직원의 급여와 부서번호를 동시에 수정합니다.

4. 조건 없이 전체 행 수정

UPDATE employees
SET salary = salary * 1.1;

모든 직원의 급여를 10% 인상합니다. WHERE 절이 없기 때문에 전체 행이 수정됩니다.

5. 서브쿼리를 활용한 UPDATE

UPDATE employees
SET salary = (SELECT AVG(salary) FROM employees)
WHERE department_id = 50;

부서 50번의 직원 급여를 전체 평균 급여로 일괄 변경합니다.

6. JOIN을 활용한 UPDATE

UPDATE (SELECT e.salary, g.grade_level
        FROM employees e JOIN job_grades g
        ON e.salary BETWEEN g.lowest_sal AND g.highest_sal)
SET salary = salary * 1.05;

급여 등급에 따라 매칭되는 직원의 급여를 5% 인상합니다. Oracle에서는 MERGE 또는 서브쿼리를 통해 JOIN UPDATE를 구현합니다.

7. NULL 값으로 업데이트

UPDATE employees
SET commission_pct = NULL
WHERE department_id = 80;

부서 80번 직원의 커미션 비율을 초기화합니다.

8. 날짜 데이터 업데이트

UPDATE employees
SET hire_date = TO_DATE('2020-01-01', 'YYYY-MM-DD')
WHERE employee_id = 103;

입사일자를 지정 날짜로 수정합니다.

9. 시퀀스 또는 SYSDATE 활용 예

UPDATE employees
SET updated_at = SYSDATE
WHERE department_id = 90;

90번 부서 직원들의 레코드에 시스템 시간을 기록합니다.

10. UPDATE + RETURNING INTO (PL/SQL)

DECLARE
  v_salary NUMBER;
BEGIN
  UPDATE employees
  SET salary = 7500
  WHERE employee_id = 104
  RETURNING salary INTO v_salary;
END;

PL/SQL 블록에서 수정 후 값을 변수에 즉시 저장합니다.

11. UPDATE 수행 시 자주 발생하는 오류

  • ORA-00904: 잘못된 칼럼명 또는 오타
  • ORA-01722: 숫자 변환 오류 (문자열을 숫자 칼럼에 입력 시)
  • ORA-01407: NOT NULL 제약 칼럼에 NULL을 입력했을 때

12. 트랜잭션 처리

UPDATE employees
SET salary = 8000
WHERE employee_id = 105;

COMMIT;  -- 변경 확정
-- 또는
ROLLBACK;  -- 변경 취소

Oracle에서는 트랜잭션 제어(COMMIT, ROLLBACK)를 통해 데이터 일관성을 유지합니다.

13. 성능 개선 팁

  • 인덱스를 활용해 WHERE 절 성능 최적화
  • 대량 UPDATE 시 작업을 배치 처리하거나 MERGE 문 고려
  • 트리거(TRIGGER) 사용 여부 주의: 의도치 않은 로직 발생 가능

14. MERGE vs UPDATE 비교

MERGE 문은 조건에 따라 UPDATE 또는 INSERT를 수행할 수 있는 고급 SQL 구문입니다.

MERGE INTO employees e
USING new_employees n
ON (e.employee_id = n.employee_id)
WHEN MATCHED THEN
  UPDATE SET e.salary = n.salary
WHEN NOT MATCHED THEN
  INSERT (employee_id, salary) VALUES (n.employee_id, n.salary);

참고 출처