Impedisci le eliminazioni in una tabella con versione a livello di database
Ho una tabella in un geodatabase Oracle 18c / 10.7.1. La tabella è dotata di versione con l'opzione di spostare le modifiche alla base.
Per quanto ne so, non è possibile impedire agli utenti di ArcGIS Desktop di eliminare i record, consentendo comunque inserimenti e aggiornamenti, se la tabella è registrata come versione.
Domanda:
Esiste un modo per impedire le eliminazioni in una tabella con versione, consentendo comunque inserimenti e aggiornamenti, implementando qualcosa direttamente nel DB?
Risposte
Puoi provare a mettere il trigger sulla tabella D della feature class, tuttavia questo dovrebbe logicamente impedire anche l'aggiornamento.
Questo trigger nella tabella DELETES sembra funzionare.
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 ;
Modificare:
Per i punti bonus, ho impedito le eliminazioni solo se il record è stato creato prima di una certa data (lo scorso lunedì alle 00:00).
L'ho fatto perché i miei dati vengono sincronizzati con un sistema esterno nei fine settimana. Desidero impedire agli utenti di eliminare i record che sono già stati sincronizzati con il sistema esterno.
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;