깜놀하는 해므찌로

CUBRID IBATIS 스케줄러 Merge / CUBRID merge 예시 본문

IT

CUBRID IBATIS 스케줄러 Merge / CUBRID merge 예시

agnusdei1207 2022. 10. 21. 16:27
반응형
SMALL
<resultMap id="iListTest0002.001.ResultSetMapper" class="vo.VO">
		<result property="placeId" column="place_id"/>
		<result property="msrrId" column="msrr_id"/>
		<result property="cmpyNm" column="cmpy_nm"/>
		<result property="laVal" column="la_val"/>
		<result property="loVal" column="lo_val"/>
		<result property="adres" column="adres"/>
		<result property="mesureDt" column="mesure_dt"/>
		<result property="svcNm" column="svc_nm"/>
		<result property="nabBeginFqncVal" column="nab_begin_fqnc_val"/>
		<result property="nabEndFqncVal" column="nab_end_fqnc_val"/>
		<result property="nabMxmmVal" column="nab_mxmm_val"/>
		<result property="chargerNm" column="charger_nm"/>
		<result property="nabMummVal" column="nab_mumm_val"/>
		<result property="levelVal" column="level_val"/>
</resultMap>
<statement id="iListTest0002.001" resultMap="iListTest0002.001.ResultSetMapper" remapResults="true">
    <![CDATA[
        select *
                , case
                    when D.nab_mumm_val is null or D.ermtw_in_stdr_val is null then '1'
                    when 50 >= ROUND((D.nab_mumm_val/D.ermtw_in_stdr_val)*100,1) then '1'
                    when 50 <= ROUND((D.nab_mumm_val/D.ermtw_in_stdr_val)*100,1) and 100 >= ROUND((D.nab_mumm_val/D.ermtw_in_stdr_val)*100,1) then '2'
                    else '3'
                end as LEVEL_VAL
        from(

            select C.*
                    ,case
                        when C.begin_val >= 846.00 and  C.begin_val <= 869.00
                        then 40.42
                        when C.begin_val >= 874.00 and C.begin_val <= 884.00
                        then 40.65
                        when C.begin_val >= 884.00 and C.begin_val <= 894.00
                        then 40.88
                        when C.begin_val >= 949.30 and C.begin_val <= 959.30
                        then 42.36
                        when C.begin_val >= 1810.00 and C.begin_val <= 1830.00
                        then 58.50
                        when C.begin_val >= 1830.00 and C.begin_val <= 1860.00
                        then 58.82
                        when C.begin_val >= 1940.00 and C.begin_val <= 1950.00
                        then 60.56
                        when C.begin_val >= 2110.00 and C.begin_val <= 5825.00
                        then 61.00
                    end as ermtwInStdrVal
            FROM(
                select
                    A.place_id
                    , A.mesure_dt
                    , A.svc_nm
                    , A.nab_begin_fqnc_val
                    , A.nab_end_fqnc_val
                    , A.nab_mxmm_val
                    , A.nab_mumm_val
                    , TRUNC(A.nab_begin_fqnc_val/1000000) as begin_val
                    , TRUNC(A.nab_end_fqnc_val/1000000) as end_val
                    , B.msrr_id
                    , B.cmpy_nm
                    , B.la_val
                    , B.lo_val
                    , B.adres
                    , B.charger_nm

                        from A A
                        inner join B B
                        on A.place_id  = B.place_id
                        where mesure_dt = (select MAX(mesure_dt) from ehmedgm017n)
                ) C
            ) D

        /* iListTest0002.001 */
    ]]>
</statement>



<resultMap id="dao.iMerge0002.001.ResultSetMapper" class="dvo.VO"></resultMap>
<statement id="dao.iMerge0002.001" parameterClass="java.util.Map" resultMap="dao.iMerge0002.001.ResultSetMapper">
    <![CDATA[
        merge into TEST A
        using (db_root)
            on A.PLACE_ID = #placeId#
            and A.MSRR_ID = #msrrId#
            and A.SVC_NM = #svcNm#
            and A.CMPY_NM = #cmpyNm#
        when matched then
            update set
                A.MESURE_DT = #mesureDt#
                , A.NAB_BEGIN_FQNC_VAL = #nabBeginFqncVal#
                , A.NAB_END_FQNC_VAL = #nabEndFqncVal#
                , A.ERMTW_IN_STDR_VAL = #ermtwInStdrVal#
                , A.NAB_MUMM_VAL = #nabMummVal#
                , A.LEVEL_VAL = #levelVal#
        when not matched then
                INSERT(
                    PLACE_ID
                    ,MSRR_ID
                    ,CMPY_NM
                    ,LA_VAL
                    ,LO_VAL
                    ,ADRES
                    ,CHARGER_NM
                    ,MESURE_DT
                    ,SVC_NM
                    ,NAB_BEGIN_FQNC_VAL
                    ,NAB_END_FQNC_VAL
                    ,NAB_MUMM_VAL
                    ,ERMTW_IN_STDR_VAL
                    ,LEVEL_VAL
                    )
                    VALUES(
                    #placeId#
                    , #msrrId#
                    , #cmpyNm#
                    , #laVal#
                    , #loVal#
                    , #adres#
                    , #chargerNm#
                    , #mesureDt#
                    , #svcNm#
                    , #nabBeginFqncVal#
                    , #nabEndFqncVal#
                    , #nabMummVal#
                    , #ermtwInStdrVal#
                    , #levelVal#
                    )

        /* dao.iMerge0002.001 */
    ]]>
</statement>

1. 조회 문

2. 조회한 결과를 다시 merge 하는 Query 

3. ermtwInStdrVal : result 속성에 property / column 에 추가하지 않고 바로 mapping 될 수 있도록 as 와 VO 필드 변수를 맞춤 처리

 

반응형
LIST