데이터베이스 수준에서 버전이 지정된 테이블의 삭제 방지
Oracle 18c / 10.7.1 지오 데이터베이스에 테이블이 있습니다. 테이블은 편집 내용을베이스로 이동하는 옵션으로 버전이 지정됩니다.
내가 알 수있는 한, ArcGIS Desktop 사용자가 레코드를 삭제하는 것을 방지하는 동시에 테이블이 버전 관리 된 것으로 등록 된 경우 삽입 및 업데이트를 허용하는 것은 불가능합니다.
질문:
DB에 직접 구현하여 버전이 지정된 테이블에서 삭제를 방지하는 동시에 삽입 및 업데이트를 허용하는 방법이 있습니까?
답변
1 S_K
피쳐 클래스의 D 테이블에 트리거를 배치 할 수 있지만 논리적으로도 업데이트를 방지해야합니다.
1 User1973
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시) 이전에 레코드가 생성 된 경우에만 삭제를 금지했습니다.
주말에 데이터가 외부 시스템에 동기화되기 때문에 이렇게했습니다. 사용자가 이미 외부 시스템에 동기화 된 레코드를 삭제하지 못하도록하고 싶습니다.
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;