ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ORACLE]LOOP를 이용한 SELECT UPDATE 하기
    설치&설정 관련/ORACLE 2015. 1. 2. 22:57

    특정 테이블의 여러 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를 할 수 있다.

    '설치&설정 관련 > ORACLE' 카테고리의 다른 글

    [TIP]ORACLE LONG DATATYPE 에 대하여  (0) 2015.11.18
    [ORACLE]권한 및 synonym 생성  (0) 2014.02.05
Designed by Tistory.