Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Kích hoạt với câu lệnh Merge trong oracle

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!).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể tham gia giữa các nguồn dữ liệu trong SSRS không?

  2. Truy vấn SQL 00904. 00000 -% s:mã định danh không hợp lệ

  3. ORA-00900:lỗi câu lệnh SQL không hợp lệ? Có vấn đề gì với sql của tôi?

  4. Làm cách nào để tạo nhiều kết nối giản đồ bằng Java?

  5. cập nhật một bảng oracle rất lớn