반응형
DB 사용중에 다중 업데이트를 사용해야하는 경우입니다.
고쳐야되는 상황) A테이블에 F_ID가 B테이블의 F_NAME과 같을 경우 B테이블의 F_ID로 전환시켜줘야한다.
A 테이블의 있는 데이터를 B 테이블과 매치되는 경우에 한하여 업데이트를 해야해서 처음에는 MERGE 문을 사용했습니다.
MERGE INTO
T_SONG A
USING
T_MEMBER B
ON
(A.F_ID = B.F_NAME)
WHEN MATCHED
THEN
UPDATE SET A.F_ID = B.F_ID;
이렇게 했더니 오류가 납니다.
[99999][38104] ORA-38104: ON 절에서 참조되는 열은 갱신할 수 없음: "A"."F_ID"
이런식으로 MERGE문은 ON 절에서 참조되는 열은 업데이트에 사용할 수 없다고 합니다.
다음 방법으로는 UPDATE의 SUBQUERY를 이용했습니다.
UPDATE
T_SONG A
SET
A.f_id = (SELECT B.f_id FROM T_MEMBER B WHERE A.F_ID = B.F_NAME)
WHERE EXISTS (
SELECT
0
FROM
T_MEMBER B
WHERE
A.F_ID = B.F_NAME
)
;
UPDATE의 경우 오류없이 진행됩니다.
왜 똑같이 F_ID를 업데이트하는 것인데 UPDATE만 오류가 안 뜰까요.
반응형
'DB' 카테고리의 다른 글
테이블 생성시 유의사항 (0) | 2024.10.17 |
---|---|
db 테이블 명세서 작성 쿼리 (0) | 2024.10.17 |
오라클,MySQL 특정 문자 정렬 (0) | 2024.10.17 |
쿼리 조건절 유의점 (0) | 2024.08.24 |
쿼리 속도차이 (0) | 2024.03.22 |