티스토리 뷰
[ORACLE] [SQL] SELECT 해서 INSERT 하기
나RD 2017. 1. 2. 11:23동기
프로젝트를 진행 중에 예기치 못한 요구사항으로 인한 DB 변경이 이루어질 때가 있다.
이때, 컬럼만 추가해서 NULL 값이 들어가도 되거나, 그냥 기본 값 = (예를 들어) 1 이 들어간다면 얼마나 좋을까?
하지만, 그룹으로 묶어서 값을 넣어주어야 한다면 좀 더 복잡해지기 마련이다.
그룹으로 묶어서 LEVEL 값을 넣어주어야 했다.
방법
UPDATE /*+ BYPASS_UJVC */ ( SELECT A.COLUMN1 UPD_COL , B.RNUM SEL_COL FROM TABLE_A A , ( SELECT KEY_COLUMN, ROW_NUMBER() OVER(PARTITION BY GROUP_COLUMN1, GROUP_COLUMN2 ORDER BY ORDER_COLUMN) AS RNUM FROM TABLE_A ) B WHERE A.KEY_COLUMN = B.KEY_COLUMN ) SET UPD_COL = SEL_COL
|
헌데, oracle 11g 에서는 에러가 터지는 게 아닌가?!
"ORA-01779"
이유인 즉슨, "BYPASS_UJVC 힌트는 키값의 보존이 되지 않는 치명적 약점을 가지고 있다. 이에 따라 애써 수립한 데이터 아키텍처를 무용지물로 만들 수 있는 위험이 따른다."고 한다.
해결방법
MERGE INTO TABLE_A A USING ( SELECT KEY_COLUMN, ROW_NUMBER() OVER(PARTITION BY GROUP_COLUMN1, GROUP_COLUMN2 ORDER BY ORDER_COLUMN) AS RNUM FROM TABLE_A ) B ON (A.CD= B.CD) WHEN MATCHED THEN UPDATE SET A.UPD_COL = B.RNUM |
참고
'개발자의 삶 > Database(PostgreSQL, Redis, Oracle, ...)' 카테고리의 다른 글
단기 속성 입문 현업 사용 MS-SQL SSMS 단축키 설정 정리 (0) | 2017.05.18 |
---|---|
[MySQL] MySQL 64bit 설치 (2) | 2017.05.10 |
[MySQL] Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode ... (0) | 2017.05.10 |
[MS-SQL] 중국어 깨질 때 (0) | 2017.03.22 |
[Oracle] 버전 확인 (0) | 2016.12.09 |
[오라클] primary key 추가 삭제 (2) | 2016.12.02 |
[ORACLE] INDEX 목록 조회 (1) | 2016.09.20 |
[ORACLE] [SQL PLUS] sql script 실행 (0) | 2016.07.26 |