У меня есть 2 триггера вставки, которые срабатывают на одной и той же таблице, они оба пытаются изменить содержимое строки таблицы, а затем происходит коллизия, или мой разработчик sql начинает бесконечное выполнение команд, а затем мне нужно перезапустить БД. Как это исправить? Должен ли я объединить эти 2 триггера в 1 триггер? Или следует попытаться контролировать порядок стрельбы с помощью этой команды:
execute immediate 'alter trigger trigger_name disable';
execute immediate 'alter trigger trigger_name enable';
или мне следует использовать триггер внутри триггера ... пожалуйста, я хочу получить экспертное заключение по этому вопросу ... я сейчас нахожусь в большой дилемме, поскольку я впервые делаю кодирование PL / SQL.
РЕДАКТИРОВАТЬ: ЗДЕСЬ ТРИГГЕРЫ, с которыми я работаю:
create or replace
TRIGGER TRG_PROCED_SN_INS_CENA
AFTER INSERT ON STAVKA_NARUDZBENICE
FOR EACH ROW
DECLARE
pragma autonomous_transaction;
sifra_narudzbenice NUMBER;
BEGIN
paket_sn_sifnar.sifra_narudzbenice := :NEW.sifra_narudzbenice;
pStavkaNarudzbeniceInsert(paket_sn_sifnar.sifra_narudzbenice);
COMMIT;
END;
/
create or replace
TRIGGER TRG_SN_INS_UPD_NAZIV
AFTER INSERT ON Stavka_narudzbenice
FOR EACH ROW
FOLLOWS TRG_PROCED_SN_INS_CENA
DECLARE
v_naziv_proizvoda VARCHAR2(25);
v_cena NUMBER;
BEGIN
SELECT naziv_proizvoda INTO v_naziv_proizvoda
FROM proizvod
WHERE sifra_proizvoda=:NEW.sifra_proizvoda;
SELECT cena INTO v_cena
FROM stavka_kataloga
WHERE sifra_proizvoda=:NEW.sifra_proizvoda;
UPDATE stavka_narudzbenice
SET naziv_proizvoda = v_naziv_proizvoda, cena = v_cena WHERE sifra_proizvoda =:NEW.sifra_proizvoda;
END;
/