데이터베이스 수준에서 버전이 지정된 테이블의 삭제 방지

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시) 이전에 레코드가 생성 된 경우에만 삭제를 금지했습니다.

주말에 데이터가 외부 시스템에 동기화되기 때문에 이렇게했습니다. 사용자가 이미 외부 시스템에 동기화 된 레코드를 삭제하지 못하도록하고 싶습니다.

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;