본문 바로가기

03. DB/01. 공통 개념

엑셀 활용하여 쿼리 작성 참고용(merge)

데이터들을 엑셀값으로 받으면 그것을 insert, update를 해줬어야 했는데 (신규데이터, 기존데이터 구분해서) 이것을 해당 값만 가져와서 merge문을 만들어 넣어줬었다. 최근에 활용했던 것은 계정 생성을 하고 관리자 권한을 주려면 각 부서마다 유저 정보(테이블 2개) + 권한 데이터를 일일이 넣어줘야 했는데(사이트에서 해당 부서 계정 생성 + 권한 부여) 귀찮아서 전부 insert 문 작성해서 넣어줬던 기억이..

+가상테이블(dual)이 없는 DB의 경우 다른 테이블 매칭이 필요

 

 

MERGE INTO TS_OVERSEAS_STATS A USING DUAL ON (A.NTN_CD = '"&A3&"' AND A.NTN_NM = '"&B3&"' AND A.YEAR = '"&C3&"') WHEN MATCHED THEN UPDATE SET DNZN_PERSON = "&D3&", STAY_PERSON = "&E3&", STUDY_PERSON = "&F3&", CTZN_PERSON = "&G3&", TOTAL = "&H3&", LST_UPD_ID = '"&K3&"', LST_UPD_DTM = TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')WHEN NOT MATCHED THEN INSERT (NTN_CD, NTN_NM, YEAR, DNZN_PERSON, STAY_PERSON, STUDY_PERSON, CTZN_PERSON, TOTAL, REG_ID, REG_DTM, LST_UPD_ID, LST_UPD_DTM, DEL_YN) VALUES ('"&A3&"', '"&B3&"', '"&C3&"', "&D3&", "&E3&", "&F3&", "&G3&", "&H3&", ' SYSTEM ', TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'), 'SYSTEM', TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'), 'N');


--작성(보기 편하게 줄 변경)
MERGE
INTO
TS_OVERSEAS_STATS A
USING DUAL  --하나의 테이블만 이용한다면  DUAL 활용
ON
(A.NTN_CD = '"&A3&"'
AND A.NTN_NM = '"&B3&"'
AND A.YEAR = '"&C3&"') --WHERE절에 조건 쓰듯이

WHEN MATCHED THEN -- ON 이하의 조건에 해당하는 데이터가 있는 경우 update 실행

UPDATE --update 실행
SET
DNZN_PERSON = "&D3&", 
STAY_PERSON = "&E3&", 
STUDY_PERSON = "&F3&", 
CTZN_PERSON = "&G3&", 
TOTAL = "&H3&",
LST_UPD_ID = '"&K3&"',
LST_UPD_DTM = TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')

WHEN NOT MATCHED THEN -- ON 이하의 조건에 해당하는 데이터가 없는 경우 insert실행

INSERT --insert 실행
(NTN_CD, NTN_NM, YEAR, DNZN_PERSON, STAY_PERSON, STUDY_PERSON, CTZN_PERSON, TOTAL, REG_ID, REG_DTM, LST_UPD_ID, LST_UPD_DTM, DEL_YN)
VALUES ('"&A3&"', '"&B3&"', '"&C3&"', "&D3&", "&E3&", "&F3&", "&G3&", "&H3&", ' SYSTEM ', TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'), 'SYSTEM', TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'), 'N');

'03. DB > 01. 공통 개념' 카테고리의 다른 글

[개념]DDL, DML, DCL, TCL  (0) 2023.11.23