본문
Oracle 데이터 치환
DB(Oracle) 2017. 1. 5. 23:02
반응형
# Oracle 데이터 치환
수정해야할 데이터가 많을 경우, 아래와 같이 데이터 치환을 사용한다.
- TABLE_A의 BALANCE 데이터 치환
<TABLE_A>
1. 수정할 balance 데이터를 담은 TABLE_A_TEMP 테이블을 생성 (ID, BALANCE2)
excel에 필드명, 필드데이터 기재 후 DB tool에서 제공하는 Import 기능을 사용한다.
<TABLE_A_TEMP>
2. 데이터 치환
ex)
1 2 3 4 | UPDATE TABLE_A SET TABLE_A.치환될_필드 = NVL((SELECT DISTINCT MAX(TABLE_A_TEMP.치환할_데이터) FROM TABLE_A_TEMP WHERE TABLE_A.필드A = TABLE_A_TEMP.필드B), TABLE_A.치환될_필드) WHERE TABLE_A.조건필드 = 조건데이터; |
sample)
1 2 3 4 | UPDATE TABLE_A SET TABLE_A.balance = NVL((SELECT DISTINCT MAX(TABLE_A_TEMP.balance2) FROM TABLE_A_TEMP WHERE TABLE_A.id = TABLE_A_TEMP.id), TABLE_A.balance) WHERE TABLE_A.contract_id = 125258; |
3. 치환 결과 확인
<TABLE_A>
※ 다중 필드 치환
UPDATE TABLE_A
SET TABLE_A.balance = NVL((SELECT DISTINCT MAX(TABLE_A_TEMP.value1) FROM TABLE_A_TEMP
WHERE TABLE_A.id = TABLE_A_TEMP.id), TABLE_A.balance),
TABLE_A.name = NVL((SELECT DISTINCT MAX(TABLE_A_TEMP.value2) FROM TABLE_A_TEMP
WHERE TABLE_A.id = TABLE_A_TEMP.id), TABLE_A.name),
TABLE_A.address = NVL((SELECT DISTINCT MAX(TABLE_A_TEMP.value3) FROM TABLE_A_TEMP
WHERE TABLE_A.id = TABLE_A_TEMP.id), TABLE_A.address)
WHERE TABLE_A.contract_id = 125258;
P.S.
- NVL(Null Value)
조건에 만족하지 않는 필드가 NULL로 갱신되는것을 방지
Ex) NVL(value, 1)
- value가 null 일경우 1을 반환, 그렇지 않을경우 value값을 반환
반응형
댓글