Giả sử chúng ta có 3 bản ghi trong bảng: orig_tabkích hoạt cho các giá trị chỉ thay đổi
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 1 | AA | Street1 | 11111 |
| 2 | BB | Street2 | 22222 |
| 3 | CC | Street3 | 33333 |
---------------------------------------------
Bây giờ dữ liệu được thay đổi:
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 1 | AA | Street1 | 11111 |
| 2 | BB | Street2 | 44444 |
| 3 | CC | Dtreet7 | 33333 |
---------------------------------------------
client gì muốn là các hồ sơ cập nhật và chỉ có các cột được cập nhật (có, tôi biết nó không có ý nghĩa gì nhưng họ sử dụng một số hệ thống cũ từ những năm 1970 và họ muốn làm một số đăng nhập vv). Vì vậy, các bảng báo cáo nên được như thế này:
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 2 | | | 44444 |
| 3 | | Dtreet7 | |
---------------------------------------------
gì này tôi đã cố gắng:
CREATE OR REPLACE TRIGGER vr_reporting_trigger
AFTER UPDATE ON orig_tab
FOR EACH ROW
BEGIN
IF inserting THEN
INSERT INTO rep_tab(pk, name, address, code)
SELECT :new.pk, :new.name, :new.address, :new,code FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM rep_tab WHERE pk = :new.pk);
UPDATE rep_tab t SET t.name = :new.name, t.address = :new.address, t.code = :new.code
WHERE t.pk = :new.pk;
ELSIF updating THEN
IF :new.pk <> :old.pk THEN
UPDATE rep_tab t
SET t.name = :new.name, t.address = :new.address, t.code =: new.code
WHERE t.pk = :old.pk ;
END IF;
MERGE INTO rep_tab d
USING DUAL ON (d.pk = :old.pk)
WHEN MATCHED THEN
UPDATE SET d.name = :new.name, d.address = :new.address, d.code =: new.code
WHEN NOT MATCHED THEN
INSERT (d.pk,d.name, d.address, d.code) VALUES (:new.pk,:new.name, new.address, new.code);
END IF;
END;
với giải pháp này, tôi nhận được:
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 2 | BB | Street2 | 44444 |
| 3 | CC | Dtreet7 | 33333 |
---------------------------------------------
Tôi biết rằng nó ở đâu đó trong claus chèn trong khi cập nhật tuyên bố nhưng tôi không thể tìm ra làm thế nào để có claus này thay đổi theo yêu cầu của tôi. Bất kì lời đề nghị nào?
Xin cảm ơn trước.
+1, nhưng 9i tài liệu? Đây là [phiên bản 11g] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#sthref771) –
Điều này dường như kích hoạt nếu cột y thứ là một phần của câu lệnh UPDATE. Không chỉ nếu giá trị thay đổi. –