Ngăn chặn xóa trong một bảng được phiên bản ở cấp cơ sở dữ liệu
Tôi có một bảng trong cơ sở dữ liệu địa lý Oracle 18c / 10.7.1. Bảng được tạo phiên bản với tùy chọn để di chuyển các chỉnh sửa sang cơ sở.
Theo như tôi có thể nói, không thể ngăn người dùng ArcGIS Desktop xóa bản ghi, trong khi vẫn cho phép chèn và cập nhật, nếu bảng được đăng ký dưới dạng phiên bản.
Câu hỏi:
Có cách nào để ngăn chặn việc xóa trong một bảng được tạo phiên bản, trong khi vẫn cho phép chèn và cập nhật, bằng cách triển khai một cái gì đó trực tiếp trong DB không?
Trả lời
Bạn có thể thử đặt trình kích hoạt trên bảng D của lớp tính năng, tuy nhiên điều này một cách hợp lý cũng sẽ ngăn cập nhật.
Trình kích hoạt này trên bảng DELETES dường như hoạt động.
CREATE OR REPLACE TRIGGER D202574_custom
BEFORE INSERT ON D202574
FOR EACH ROW
DECLARE
v_upd_row NUMBER;
BEGIN
SELECT COUNT(1) INTO v_upd_row
FROM A202574
WHERE objectid = :new.sde_deletes_row_id
AND sde_state_id = :new.deleted_at;
IF v_upd_row = 0 THEN
raise_application_error(-20001, 'Deleting has been disabled via a custom trigger.');
END IF;
END ;
Biên tập:
Đối với điểm thưởng, tôi chỉ ngăn chặn việc xóa nếu bản ghi được tạo trước một ngày nhất định (Thứ Hai tuần trước lúc 12:00 AM).
Tôi đã làm điều này vì dữ liệu của tôi được đồng bộ hóa với hệ thống bên ngoài vào cuối tuần. Tôi muốn ngăn người dùng xóa các bản ghi đã được đồng bộ hóa với hệ thống bên ngoài.
create or replace trigger v202577_delete_custom
before insert
on d202577
for each row
declare
v_upd_row number;
v_cre_date_row number;
begin
select
count (1)
into v_upd_row
from a202577
where
objectid = :new.sde_deletes_row_id
and sde_state_id = :new.deleted_at;
select
count (1)
into v_cre_date_row
from
a_test_fc a
where
a.objectid = :new.sde_deletes_row_id
and a.created_date < trunc(next_day (sysdate - 6, 'monday'));
if v_upd_row = 0 and v_cre_date_row > 0
then
raise_application_error ( -20001, 'Deleting has been disabled via a custom trigger.');
end if;
end;