Триггер удаления дубликатов Oracle - PullRequest
0 голосов
/ 26 мая 2020

если я вставлю более одной строки с одним и тем же cod_regista, это создаст дубликаты, как я могу их удалить? Мне нужна только одна запись для каждого значения

CREATE OR REPLACE TRIGGER piazzetta_trg
BEFORE INSERT OR UPDATE
ON regia_piazzetta
FOR EACH ROW
BEGIN
IF INSERTING THEN
     FOR a IN(SELECT cod_regista, SUM(costo_produzione) as tot
              FROM regia_piazzetta
              GROUP BY cod_regista)
        LOOP     
            INSERT INTO piazzetta_tot VALUES (a.cod_regista, a.tot);
        END LOOP;
    UPDATE piazzetta_tot SET costo_totale = costo_totale + :new.costo_produzione WHERE piazzetta_tot.id_regista = :new.cod_regista;
END IF;
IF UPDATING THEN 
    UPDATE piazzetta_tot SET costo_totale = costo_totale+(:new.costo_produzione - :old.costo_produzione) WHERE piazzetta_tot.id_regista = :new.cod_regista;
  END IF;
END;

1 Ответ

6 голосов
/ 26 мая 2020

Не используйте триггер. Создайте первичный ключ

  • или
  • уникальный ключ (допускает значения NULL) или
  • уникальный индекс

и позвольте базе данных принимать заботиться о дубликатах .

В качестве альтернативы можно решить проблему при вставке строк в таблицу в операторе INSERT. Триггер должен быть вашим последним выбором.

...