일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 도서
- DB
- 한글
- 오라클
- 엑셀
- 톰캣
- 태그를 입력해 주세요.
- Book
- 자바
- JavaScript
- 이클립스
- Excel
- Report Designer
- JEUS
- 튜닝
- MIP
- Tomcat
- 회계
- 마이플랫폼
- error
- oracle
- 에러
- miplatform
- Eclipse
- 성능
- java
- 기타소득
- 데이터베이스
- 오류
- 함수
- Today
- Total
어느 가을날의 전환점
ORACLE|오라클 수정 가능 조인 뷰(/*+ BYPASS_UJVC */), ORA-01779, MERGE 본문
※ 수정 가능 조인 뷰
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(...)
'Database > Oracle' 카테고리의 다른 글
ORACLE|오라클 Multiple Insert - Insert All (2) | 2013.06.11 |
---|---|
ORACLE|ORA-01858: 수치를 지정해야 할 위치에 비수치 문자가 지정되었습니다. (0) | 2013.05.10 |
ORACLE|Primary Key와 Unique Index의 성능 (0) | 2013.03.22 |
ORACLE|오라클 CLOB 컬럼 사이즈 구하기(Bytes Size) (0) | 2013.02.26 |
ORACLE|User 권한 부여 (Rule: Connect, Resource) (0) | 2012.09.19 |