Giải pháp tiêu chuẩn cho lỗi bảng thay đổi là tạo
- Một gói có tập hợp các khóa (tức là docId trong trường hợp này). Một bảng tạm thời cũng sẽ hoạt động
- Một trình kích hoạt câu lệnh before khởi chạy bộ sưu tập
- Trình kích hoạt cấp hàng điền vào bộ sưu tập với mỗi docId đã thay đổi
- Một trình kích hoạt câu lệnh sau lặp lại bộ sưu tập và thực hiện CẬP NHẬT thực tế
Vì vậy, một cái gì đó như
CREATE OR REPLACE PACKAGE pkg_document_status
AS
TYPE typ_changed_docids IS TABLE OF documentos.docId%type;
changed_docids typ_changed_docids := new typ_changed_docids ();
<<other methods>>
END;
CREATE OR REPLACE TRIGGER trg_init_collection
BEFORE DELETE ON documentStatusHistory
BEGIN
pkg_document_status.changed_docids.delete();
END;
CREATE OR REPLACE TRIGGER trg_populate_collection
BEFORE DELETE ON documentStatusHistory
FOR EACH ROW
BEGIN
pkg_document_status.changed_docids.extend();
pkg_document_status.changed_docids( pkg_document_status.changed_docids.count() ) := :old.docId;
END;
CREATE OR REPLACE TRIGGER trg_use_collection
AFTER DELETE ON documentStatusHistory
BEGIN
FOR i IN 1 .. pkg_document_status.changed_docids.count()
LOOP
<<fix the current status for pkg_document_status.changed_docids(i) >>
END LOOP;
pkg_document_status.changed_docids.delete();
END;