Tôi nghi ngờ là bạn đã trộn tất cả dữ liệu nguồn của mình trong tuyên bố hợp nhất của mình. Bạn chỉ muốn xem xét các hàng đang được chèn, phải không?
Tôi nghĩ trình kích hoạt của bạn phải là một cái gì đó giống như:
CREATE OR REPLACE TRIGGER test_tri
after INSERT
ON test1
FOR EACH ROW WHEN (NEW.col5 >= '01-MAY-16')
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
IF INSERTING
THEN
MERGE INTO test_hist hist
USING (select :new.package_id, :new.col1, :new.col2, :new.col3, :new.col4, :new.col5
from dual) t1
ON (t1.PACKAGE_ID=hist.PACKAGE_ID)
WHEN MATCHED THEN
UPDATE SET hist.col5=t1.col5
WHEN NOT MATCHED THEN
INSERT (col1, col2, col3, col4, col5)
VALUES (t1.col1, t1.col2, t1.col3, t1.col4, t1.col5);
END IF;
COMMIT;
END;
/
N.B. nếu:new.col5 là cột ngày tháng thì hãy thay đổi:
FOR EACH ROW WHEN (NEW.col5 >= '01-MAY-16')
đến
FOR EACH ROW WHEN (NEW.col5 >= to_date('01/05/2016', 'dd/mm/yyyy'))
Năm có 4 chữ số (tôi đoán ý bạn là năm 2016 chứ không phải năm 1916!).