Insert와 Update를 한번에~~ MERGE INTO
테이터를 넣어야할 테이블에
값이 이미 있으면 Update
값이 없으면 Insert
MERGE INTO table_name alias --테이블 명만 올수 있음(셀렉트 쿼리 No)
USING (table|view|subquery) alias --일반적으로 쓰는 쿼리 Ok
ON (join condition) --where 절이라고 생각하면됨(조건에 서브 OK)
WHEN MATCHED THEN --데이터 중복건이 있는경우 Update
UPDATE SET col1 = val1[, col2 = val2…]
WHEN NOT MATCHED THEN -- 중복건이 없는 경우 처리 Insert
INSERT (컬럼리스트) VALUES (값들....);
ex)
MERGE INTO CRCD_WF_CARD A
USING DUAL
ON ( A.WF_NO = ? AND A.CRD_NO =? )
WHEN MATCHED THEN
UPDATE SET
A.CRD_TYPE =?
, A.FML_SSN =?
, A.FMLHG_NM =?
, A.FMLENG_NM =?
, A.OCRD_NO =?
, A.DSN_CD =?
, A.DSN_NM =?
, A.BRD_CD =?
, A.CRD_GRD =?
, A.INTGLMT_AMT =?
, A.FML_STLACCT_NO =?
, A.CRD_ISSUE_DT =?
WHEN NOT MATCHED THEN
INSERT (
A.WF_NO
, A.CRD_NO
, A.CRD_TYPE
, A.FML_SSN
, A.FMLHG_NM
, A.FMLENG_NM
, A.OCRD_NO
, A.DSN_CD
, A.DSN_NM
, A.BRD_CD
, A.CRD_GRD
, A.INTGLMT_AMT
, A.FML_STLACCT_NO
, A.CRD_ISSUE_DT
) VALUES ( ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ? )
-------------------------------------------------------
ex2)
MERGE INTO TC_CUSTAGENT A
USING (SELECT BUSI_CODE, CUST_CODE, CHPE_NAME, CUST_PHNB, CUST_FANU
FROM TB_ESTMAST
WHERE BUSI_CODE = '___parameter___'
AND CUST_CODE = '____parameter___') B
ON (A.BUSI_CODE = B.BUSI_CODE
AND A.AFON_COMP = B.CUST_CODE
AND A.SEQU_NUMB = (SELECT MAX(SEQU_NUMB)
FROM TC_CUSTAGENT
WHERE BUSI_CODE = A.BUSI_CODE
AND AFON_COMP = A.AFON_COMP))
WHEN MATCHED THEN
UPDATE
SET A.CHPE_NAME = B.CHPE_NAME
,A.CABL_PHNB = B.CUST_PHNB
,A.FAXM_NUMB = B.CUST_FANU
WHEN NOT MATCHED THEN
INSERT ( A.AFON_COMP
,A.CHPE_NAME
,A.CABL_PHNB
,A.FAXM_NUMB
)
VALUES ( B.CUST_CODE
,B.CHPE_NAME
,B.CUST_PHNB
,B.CUST_FANU
);
=================
select UTL_RAW.CAST_TO_VARCHAR2(pnt_zone_desc) pnt_zone_desc from zppt120
출처 : 죄송해요 어딘지 모르겠어요.ㅠㅠ; 회사 차장님이 보내주신거라.. 아마도 어디서 긁으셨을텐데... 지우라고 하시면 지우겠어효... ~.~
댓글