删除重复项会触发Oracle

问题描述 投票:0回答:1

如果我在同一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;
sql oracle plsql oracle-sqldeveloper plsqldeveloper
1个回答
1
投票

请勿使用触发器。创建

  • 主键,或
  • 唯一键(允许为空),或
  • 唯一索引

并让数据库处理重复项

或者,在INSERT语句中将行插入表中时处理此问题。触发器应该是您的最后选择。

© www.soinside.com 2019 - 2024. All rights reserved.