데이터들을 엑셀값으로 받으면 그것을 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 |
---|