업데이트 트랩

업데이트가 다른 데이터 테이블의 데이터로 업데이트될 때 조건이 부과되지 않으면 모든 데이터가 업데이트되어 예기치 않은 결과가 발생합니다.

1. 데이터 테이블 생성

CREATE TABLE TEMP_TEST(
  IDN NUMBER,
  NM  VARCHAR2(10)
);

2. 데이터 삽입

INSERT INTO TEMP_TEST VALUES(1, 'A');
INSERT INTO TEMP_TEST VALUES(2, 'D');
INSERT INTO TEMP_TEST VALUES(3, 'C');
INSERT INTO TEMP_TEST VALUES(4, 'D');
COMMIT;

여기에 사진 설명 쓰기

3. 잘못된 업데이트

테이블에서 IDN 2의 데이터 NM을 HELLO로 업데이트할 계획이며 업데이트 후 다른 데이터와 일치하는 데이터를 업데이트하고 일치하지 않는 데이터는 NULL로 설정합니다.

UPDATE TEMP_TEST T
SET T.NM =
(   WITH WA AS (SELECT 2 IDN, 'HELLO' AS NM FROM DUAL)
     SELECT NM
       FROM WA A
      WHERE A.IDN = T.IDN
);

여기에 사진 설명 쓰기

4. 올바른 업데이트

! 업데이트는 업데이트된 범위를 추가하는 것입니다.

UPDATE TEMP_TEST T
SET T.NM =
(   WITH WA AS (SELECT 2 IDN, 'HELLO' AS NM FROM DUAL)
     SELECT NM
       FROM WA A
      WHERE A.IDN = T.IDN
)
WHERE  EXISTS(
  WITH WA AS (SELECT 2 IDN, 'HELLO' AS NM FROM DUAL)
  SELECT 1 FROM WA B WHERE B.IDN = T.IDN   
);

여기에 사진 설명 쓰기

5. 데이터 업데이트 시 MERGE INTO 문 사용 권장

추천

출처blog.csdn.net/u012132482/article/details/53688454