ป้องกันการลบในตารางเวอร์ชันที่ระดับฐานข้อมูล

Aug 17 2020

ฉันมีตารางในฐานข้อมูลภูมิศาสตร์ Oracle 18c / 10.7.1 ตารางมีตัวเลือกในการย้ายการแก้ไขไปยังฐาน

เท่าที่ฉันสามารถบอกได้มันเป็นไปไม่ได้ที่จะป้องกันไม่ให้ผู้ใช้ ArcGIS Desktop ลบบันทึกในขณะที่ยังคงอนุญาตให้มีการแทรกและอัปเดตหากตารางได้รับการลงทะเบียนเป็นเวอร์ชัน

คำถาม:

มีวิธีป้องกันการลบในตารางเวอร์ชันในขณะที่ยังคงอนุญาตให้มีการแทรกและอัปเดตโดยใช้บางสิ่งในฐานข้อมูลโดยตรงหรือไม่

คำตอบ

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 ;

แก้ไข:

สำหรับคะแนนโบนัสฉันจะป้องกันการลบเฉพาะในกรณีที่สร้างบันทึกก่อนวันที่กำหนด (วันจันทร์ที่แล้วเวลา 00.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;