【发布时间】:2020-09-13 06:14:44
【问题描述】:
如果我使用相同的 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;
【问题讨论】:
-
不确定您要完成什么,但您的代码看起来有问题。每当您插入
regia_piazetta时,您都会尝试为所有不同的cod_regista创建piazetta_tot行,即使对于那些在插入语句中根本没有使用的行也是如此。也许(物化)视图会更好地满足您的要求。 -
触发器中的删除指令可以使用LIMIT子句吗?
-
行级触发器无法查询定义它的表。
标签: sql oracle plsql oracle-sqldeveloper plsqldeveloper