블로그 이미지
잡초 개발자의 좌충우돌 이야기 yysvip

카테고리

분류 전체보기 (211)
Java Programing (24)
Web Programing (20)
Database (36)
Tool (46)
까칠한 IT (27)
까칠한 정보 (42)
까칠한 Strory (16)
까칠한 Project (0)
Total1,164,494
Today4,461
Yesterday4,153

달력

« » 2018.12
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

공지사항

ORACLE|오라클 수정 가능 조인 뷰(/*+ BYPASS_UJVC */), ORA-01779, MERGE

  까칠한 남자 Strory       yysvip.tistory.com       잡초 개발자 까찰한 쑤의 좌충우돌 개발 이야기

 

 

※ 수정 가능 조인 뷰

1. /*+ BYPASS_UJVC */

   - Oracle 11g 부터 사용할 수 없는 힌트 임.

   - 키-보존이 안되서 나는 오류를 무시하라는 힌트.


UPDATE /*+ BYPASS_UJVC */

 ( SELECT A.GBN AS A_A

, B.GBN AS B_B

 FROM MAIN A

  INNER JOIN STEP B

  ON A.ID = B.ID

WHERE A.TIME='01'

 ) X

 SET X.A_A = X.B_B

;


2. ORA-01779: 키-보존된것이 아닌 테이블로 대응한 열을 수정할 수 없습니다

   (ORA-01779: cannot modify a column which maps to a non key-preserved table)

   - 키보존 되도록 하려면 B테이블의 ID 컬럼을 PK, UK로 셋팅 해야 함.

     (Unique함을 보증)


3. 다른 방법

   1) Sub-Query

UPDATE MAIN A

  SET GBN = (SELECT GBN FROM STEP B WHERE B.ID = A.ID)

WHERE A.TIME = '01'

  AND EXISTS (SELECT 1 FROM STEP B WHERE B.ID = A.ID)

;

   2) Merge

MERGE INTO MAIN A

    USING (SELECT A.ID, B.GBN FROM MAIN A, STEP B WHERE A.ID = B.ID AND A.TIME='01') C

       ON (A.ID = C.ID)

WHEN MATCHED THEN

    UPDATE SET GBN = C.GBN

 

 

MERGE INTO target_table_name

      USING (table|view|subquery) ON (join condition)

WHEN MATCHED THEN 

     UPDATE SET col1 = val1[, col2 = val2…]

WHEN NOT MATCHED THEN 

     INSERT(...) VALUES(...) 

 

Posted by yysvip

최근에 달린 댓글

최근에 받은 트랙백

글 보관함