データベースレベルでバージョン管理されたテーブルの削除を防止する
Aug 17 2020
Oracle 18c /10.7.1ジオデータベースにテーブルがあります。テーブルは、編集をベースに移動するオプションでバージョン管理されています。
私の知る限り、テーブルがバージョン管理済みとして登録されている場合、ArcGIS Desktopユーザーがレコードを削除するのを防ぐことはできませんが、挿入と更新は許可されます。
質問:
DBに直接何かを実装することにより、挿入と更新を許可しながら、バージョン管理されたテーブルでの削除を防ぐ方法はありますか?
回答
1 S_K Aug 26 2020 at 22:31
フィーチャクラスのDテーブルにトリガーを設定することもできますが、これにより論理的に更新も防止されます。
1 User1973 Aug 30 2020 at 00:24
DELETESテーブルのこのトリガーは機能しているようです。
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 ;
編集:
ボーナスポイントについては、レコードが特定の日付(先週の月曜日の午前12:00)より前に作成された場合にのみ削除を防止しました。
週末にデータが外部システムに同期されるため、これを行いました。外部システムにすでに同期されているレコードをユーザーが削除できないようにしたい。
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;