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