-
[ORACLE]LOOP를 이용한 SELECT UPDATE 하기설치&설정 관련/ORACLE 2015. 1. 2. 22:57728x90
특정 테이블의 여러 ROW를 UPDATE 해야하는 업무가 생겼다.
간단하게 SELECT UPDATE 로 처리 하면 끝날 줄 알았던 간단한 작업이, 내 발을 묶어 10시가 넘어서 퇴근하게 되었다
1. 일반 적인 방법을 이용
UPDATE t1 SET ( column1, column2 ) = ( SELECT column1 COLUMN 2 FROM t1 left join t2 ON t1.a =t2.a WHERE ...)
결과 ⇒ 실패
2.Join view 를 이용한 방법
UPDATE /*+ bypass-ujvc */ (SELECT a.t1, a.t2, b.o1, b.o2 FROM a inner join b ON a.colunm = b.colunm WHERE a.h = b.h) SET t1 = o1, t2 = o2
결과 ⇒ 실패
3. Loop를 이용
BEGIN FOR i IN (SELECT id, name, desc FROM table1) LOOP UPDATE table2 SET name = i.name, desc = i.desc WHERE id = i.id; END LOOP; END;
결과 ⇒ 성공
1, 2 번의 경우는 PK가 WHERE 조건으로 되어야 문제없이 동작을 한다.
PK를 WHERE 조건으로 사용하지 않을 경우 LOOP를 이용한 방법을 이용하면 SELECT UPDATE를 할 수 있다.
728x90'설치&설정 관련 > ORACLE' 카테고리의 다른 글
[TIP]ORACLE LONG DATATYPE 에 대하여 (0) 2015.11.18 [ORACLE]권한 및 synonym 생성 (0) 2014.02.05