메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
편집 요약 없음
 
(같은 사용자의 중간 판 5개는 보이지 않습니다)
1번째 줄: 1번째 줄:
 
=== 기본 UPDATE 문법 ===
✅ 1. 초급 - 기본 UPDATE 문법


UPDATE는 기존 데이터를 수정할 때 사용하는 명령어입니다.
UPDATE는 기존 데이터를 수정할 때 사용하는 명령어입니다.


▶ 기본 문법:
==== ▶ 기본 문법: ====
<source lang=sql>


UPDATE 테이블명
UPDATE 테이블명
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE 조건;
WHERE 조건;
</source>


SET: 변경하고 싶은 컬럼과 값을 지정합니다.
* SET: 변경하고 싶은 컬럼과 값을 지정합니다.
WHERE: 어떤 행(row)을 수정할지 조건을 줍니다.
* WHERE: 어떤 행(row)을 수정할지 조건을 줍니다.
WHERE 절이 없으면 테이블의 모든 행이 수정되므로 주의해야 합니다❗
* WHERE 절이 없으면 테이블의 모든 행이 수정되므로 주의해야 합니다❗


▶ 예제 1: 고객 이메일 변경


==== ▶ 예제 1: 고객 이메일 변경 ====
<source lang=sql>
UPDATE CUSTOMER
UPDATE CUSTOMER
SET EMAIL = 'new_email@example.com'
SET EMAIL = 'new_email@example.com'
WHERE ID = 1;
WHERE ID = 1;
</source>


ID가 1번인 고객의 이메일을 변경합니다.
ID가 1번인 고객의 이메일을 변경합니다.




▶ 예제 2: 가격 일괄 인상
==== ▶ 예제 2: 가격 일괄 인상 ====


<source lang=sql>
UPDATE PRODUCT
UPDATE PRODUCT
SET PRICE = PRICE * 1.1;
SET PRICE = PRICE * 1.1;
</source>


전체 상품 가격을 10% 인상합니다 (WHERE 없이 전체 행 업데이트❗).
전체 상품 가격을 10% 인상합니다 (WHERE 없이 전체 행 업데이트❗).




▶ COMMIT과 ROLLBACK
==== ▶ COMMIT과 ROLLBACK ====
• COMMIT; 실행 시 변경 내용이 영구 저장됩니다.
• COMMIT; 실행 시 변경 내용이 영구 저장됩니다.
• ROLLBACK; 실행 시 마지막 COMMIT 이전 상태로 복구됩니다.
• ROLLBACK; 실행 시 마지막 COMMIT 이전 상태로 복구됩니다.


----


✅ 2. 고급 UPDATE 기술
=== 고급 UPDATE 기술 ===


고급 기능은 실무에서 대량 처리, 조건 분기, 복잡한 참조 등에 매우 유용합니다.
고급 기능은 실무에서 대량 처리, 조건 분기, 복잡한 참조 등에 매우 유용합니다.




▶ 예제 3: 서브쿼리를 이용한 UPDATE
▶ 예제 3: 서브쿼리를 이용한 UPDATE


<source lang=sql>
UPDATE CUSTOMER c
UPDATE CUSTOMER c
SET EMAIL = (
SET EMAIL = (
58번째 줄: 59번째 줄:
   SELECT 1 FROM EMPLOYEE E WHERE E.EMP_ID = c.ID
   SELECT 1 FROM EMPLOYEE E WHERE E.EMP_ID = c.ID
);
);
</source>


EMPLOYEE 테이블에서 같은 ID를 가진 사람의 이메일로 CUSTOMER 테이블을 업데이트합니다.
EMPLOYEE 테이블에서 같은 ID를 가진 사람의 이메일로 CUSTOMER 테이블을 업데이트합니다.


▶ 예제 4: MERGE를 이용한 조건부 UPDATE or INSERT
▶ 예제 4: MERGE를 이용한 조건부 UPDATE or INSERT


<source lang=sql>
MERGE INTO CUSTOMER c
MERGE INTO CUSTOMER c
USING TEMP_CUSTOMER t
USING TEMP_CUSTOMER t
73번째 줄: 74번째 줄:
   INSERT (ID, NAME, EMAIL)
   INSERT (ID, NAME, EMAIL)
   VALUES (t.ID, t.NAME, t.EMAIL);
   VALUES (t.ID, t.NAME, t.EMAIL);
</source>


MERGE는 업데이트 또는 없으면 삽입까지 자동 처리됩니다.
* MERGE는 업데이트 또는 없으면 삽입까지 자동 처리됩니다.
데이터 동기화에 자주 사용됩니다.
* 데이터 동기화에 자주 사용됩니다.




▶ 예제 5: RETURNING INTO — 변경된 값을 PL/SQL 변수에 받기
▶ 예제 5: RETURNING INTO — 변경된 값을 PL/SQL 변수에 받기


<source lang=sql>
DECLARE
DECLARE
   v_email VARCHAR2(100);
   v_email VARCHAR2(100);
91번째 줄: 93번째 줄:
   DBMS_OUTPUT.PUT_LINE('변경된 이메일: ' || v_email);
   DBMS_OUTPUT.PUT_LINE('변경된 이메일: ' || v_email);
END;
END;
 
</source>
UPDATE한 결과를 변수에 즉시 받을 수 있어 후속 로직 처리에 유용합니다.
*
 
* UPDATE한 결과를 변수에 즉시 받을 수 있어 후속 로직 처리에 유용합니다.


▶ 예제 6: 병렬 UPDATE (성능 최적화용)
▶ 예제 6: 병렬 UPDATE (성능 최적화용)


<source lang=sql>
ALTER SESSION ENABLE PARALLEL DML;
ALTER SESSION ENABLE PARALLEL DML;


104번째 줄: 106번째 줄:
SET STATUS = 'ACTIVE'
SET STATUS = 'ACTIVE'
WHERE JOIN_DATE < SYSDATE - 365;
WHERE JOIN_DATE < SYSDATE - 365;
</source>


병렬로 처리하여 대량 데이터 수정 속도 향상
병렬로 처리하여 대량 데이터 수정 속도 향상
단, PARALLEL DML 활성화가 필요합니다.
단, PARALLEL DML 활성화가 필요합니다.


----
 
=== 요점 정리 ===
✅ 요약 정리
 
구분 기능 설명 예시 구문 유형
초급 기본적인 데이터 수정 UPDATE ... SET ... WHERE
고급 1 서브쿼리를 활용한 값 수정 UPDATE ... SET = (SELECT)
고급 2 조건부 INSERT/UPDATE 통합 처리 MERGE INTO ...
고급 3 변경 결과 즉시 변수에 받기 RETURNING INTO
고급 4 대용량 성능 최적화 (병렬 처리) UPDATE /*+ PARALLEL */
 
 
 


필요하신 경우 UPDATE ... JOIN, 트리거와 함께 자동 업데이트하는 로직, 에러 로깅 같은 심화 기능도 안내해드릴 수 있습니다.
{| class="wikitable" style="border-collapse: collapse; width: 100%;"
|-
! style="border-right: 1px solid #666; padding: 10px; text-align: center; background: #f0f0f0;" | 구분
! style="border-right: 1px solid #666; padding: 10px; text-align: center; background: #f0f0f0;" | 기능 설명
! style="padding: 10px; text-align: center; background: #f0f0f0;" | 예시 구문 유형
|-
| style="border-right: 2px solid #ddd; padding: 8px; text-align: center;" | 초급
| style="border-right: 2px solid #ddd; padding: 8px;" | 기본적인 데이터 수정
| style="padding: 8px; font-family: monospace;" | <source>UPDATE ... SET ... WHERE</source>
|-
| style="border-right: 2px solid #ddd; padding: 8px; text-align: center;" | 고급 1
| style="border-right: 2px solid #ddd; padding: 8px;" | 서브쿼리를 활용한 값 수정
| style="padding: 8px; font-family: monospace;" | <source>UPDATE ... SET = (SELECT)</source>
|-
| style="border-right: 2px solid #ddd; padding: 8px; text-align: center;" | 고급 2
| style="border-right: 2px solid #ddd; padding: 8px;" | 조건부 INSERT/UPDATE 통합 처리
| style="padding: 8px; font-family: monospace;" | <source>MERGE INTO ...</source>
|-
| style="border-right: 2px solid #ddd; padding: 8px; text-align: center;" | 고급 3
| style="border-right: 2px solid #ddd; padding: 8px;" | 변경 결과 즉시 변수에 받기
| style="padding: 8px; font-family: monospace;" | <source>RETURNING INTO</source>
|-
| style="border-right: 2px solid #ddd; padding: 8px; text-align: center;" | 고급 4
| style="border-right: 2px solid #ddd; padding: 8px;" | 대용량 성능 최적화 (병렬 처리)
| style="padding: 8px; font-family: monospace;" | <source>UPDATE /*+ PARALLEL */</source>
|}


특정 테이블 구조나 시나리오가 있으실까요? 계속 도와드릴게요! 🔨🤖🔧
[[category:oracle]]
[[category:oracle update]]

2025년 5월 22일 (목) 21:46 기준 최신판

기본 UPDATE 문법

UPDATE는 기존 데이터를 수정할 때 사용하는 명령어입니다.

▶ 기본 문법:


UPDATE 테이블명
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE 조건;
  • SET: 변경하고 싶은 컬럼과 값을 지정합니다.
  • WHERE: 어떤 행(row)을 수정할지 조건을 줍니다.
  • WHERE 절이 없으면 테이블의 모든 행이 수정되므로 주의해야 합니다❗


▶ 예제 1: 고객 이메일 변경

UPDATE CUSTOMER
SET EMAIL = 'new_email@example.com'
WHERE ID = 1;

ID가 1번인 고객의 이메일을 변경합니다.


▶ 예제 2: 가격 일괄 인상

UPDATE PRODUCT
SET PRICE = PRICE * 1.1;

전체 상품 가격을 10% 인상합니다 (WHERE 없이 전체 행 업데이트❗).


▶ COMMIT과 ROLLBACK

• COMMIT; 실행 시 변경 내용이 영구 저장됩니다. • ROLLBACK; 실행 시 마지막 COMMIT 이전 상태로 복구됩니다.


고급 UPDATE 기술

고급 기능은 실무에서 대량 처리, 조건 분기, 복잡한 참조 등에 매우 유용합니다.


▶ 예제 3: 서브쿼리를 이용한 UPDATE

UPDATE CUSTOMER c
SET EMAIL = (
  SELECT E.EMP_EMAIL
  FROM EMPLOYEE E
  WHERE E.EMP_ID = c.ID
)
WHERE EXISTS (
  SELECT 1 FROM EMPLOYEE E WHERE E.EMP_ID = c.ID
);

EMPLOYEE 테이블에서 같은 ID를 가진 사람의 이메일로 CUSTOMER 테이블을 업데이트합니다.

▶ 예제 4: MERGE를 이용한 조건부 UPDATE or INSERT

MERGE INTO CUSTOMER c
USING TEMP_CUSTOMER t
ON (c.ID = t.ID)
WHEN MATCHED THEN
  UPDATE SET c.NAME = t.NAME, c.EMAIL = t.EMAIL
WHEN NOT MATCHED THEN
  INSERT (ID, NAME, EMAIL)
  VALUES (t.ID, t.NAME, t.EMAIL);
  • MERGE는 업데이트 또는 없으면 삽입까지 자동 처리됩니다.
  • 데이터 동기화에 자주 사용됩니다.


▶ 예제 5: RETURNING INTO — 변경된 값을 PL/SQL 변수에 받기

DECLARE
  v_email VARCHAR2(100);
BEGIN
  UPDATE CUSTOMER
  SET EMAIL = 'update@example.com'
  WHERE ID = 1
  RETURNING EMAIL INTO v_email;

  DBMS_OUTPUT.PUT_LINE('변경된 이메일: ' || v_email);
END;
  • UPDATE한 결과를 변수에 즉시 받을 수 있어 후속 로직 처리에 유용합니다.

▶ 예제 6: 병렬 UPDATE (성능 최적화용)

ALTER SESSION ENABLE PARALLEL DML;

UPDATE /*+ PARALLEL(CUSTOMER, 4) */
CUSTOMER
SET STATUS = 'ACTIVE'
WHERE JOIN_DATE < SYSDATE - 365;

병렬로 처리하여 대량 데이터 수정 속도 향상 단, PARALLEL DML 활성화가 필요합니다.


요점 정리

구분 기능 설명 예시 구문 유형
초급 기본적인 데이터 수정
UPDATE ... SET ... WHERE
고급 1 서브쿼리를 활용한 값 수정
UPDATE ... SET = (SELECT)
고급 2 조건부 INSERT/UPDATE 통합 처리
MERGE INTO ...
고급 3 변경 결과 즉시 변수에 받기
RETURNING INTO
고급 4 대용량 성능 최적화 (병렬 처리)
UPDATE /*+ PARALLEL */