Impedir exclusões em uma tabela com versão no nível do banco de dados
Eu tenho uma tabela em um geodatabase Oracle 18c / 10.7.1. A tabela é versionada com a opção de mover edições para a base.
Tanto quanto eu posso dizer, é não possível impedir que os usuários do ArcGIS Desktop de exclusão de registros, permitindo ainda inserções e atualizações, se a tabela é registrado como controle de versão.
Questão:
Existe uma maneira de evitar exclusões em uma tabela com controle de versão e, ao mesmo tempo, permitir inserções e atualizações, implementando algo diretamente no banco de dados?
Respostas
Você pode tentar colocar o gatilho na tabela D da classe de recurso, no entanto, isso logicamente deve impedir a atualização também.
Este gatilho na tabela DELETES parece funcionar.
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 ;
Editar:
Para pontos de bônus, eu só evitei exclusões se o registro foi criado antes de uma certa data (última segunda-feira às 12h00).
Fiz isso porque meus dados são sincronizados com um sistema externo nos fins de semana. Desejo evitar que os usuários excluam registros que já foram sincronizados com o sistema externo.
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;