Merge Statement

MERGE INTO SALED T
          USING (
            SELECT c.cstmr_id, item_id, color_id, 24 mgn_rate, 0 mgr_rate,
                   hal_rate, a.CUR_PAN_PRICE pan_price, b.saleh_id
                 , to_char(sysdate, 'yyyymmdd') add_date, rUserCode user_id
              FROM TABLE(CAST(m_SALE_DTL_TBL AS SALE_DTL_TBL)) a,
                  (SELECT id saleh_id
                    FROM saleh
                   WHERE (pSaleSdate BETWEEN sale_sdate AND sale_edate
                         OR
                         pSaleSdate < sale_sdate)) b,
                  (SELECT CASE WHEN rownum = 1 THEN '*****' ELSE 'C****' END cstmr_id
                     FROM dual CONNECT BY level < 3) c
             --where a.id = :lv_saleh_id
           ) s
           ON (t.saleh_id = s.saleh_id AND t.cstmr_id = s.cstmr_id
               AND t.item_id  = s.item_id AND t.color_id = s.color_id)
         WHEN MATCHED THEN
           UPDATE SET t.mgn_rate = s.mgn_rate
                    , t.hal_rate = s.hal_rate
                    , t.pan_price = s.pan_price
                    , t.add_date = s.add_date
                    , t.user_id = s.user_id
         WHEN NOT MATCHED THEN
           INSERT (cstmr_id, item_id, color_id, mgn_rate, mgr_rate,
                   hal_rate, pan_price, saleh_id, add_date, user_id)
           VALUES (s.cstmr_id, s.item_id, s.color_id, s.mgn_rate, s.mgr_rate,
                   s.hal_rate, s.pan_price, s.saleh_id, s.add_date, s.user_id);