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);