我试图创建更新触发器,但我一直在“变异表”错误上碰撞。主要想法是销售&购买数据库与用户评级。 基本上我想,每次PRODUTOS表上的评分都会更新,重新计算卖家的评分。 我想下面的触发器(和它的版本),但它没有成气候..在更新触发器获取更新条目的ID - 突变表错误
CREATE OR REPLACE TRIGGER actualiza_rating_vend
AFTER UPDATE OF RATING_VENDEDOR
ON PRODUTOS
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
CURSOR prod IS
SELECT ID_USER,RATING_VENDEDOR, ID_COMPRADOR, RATING_COMPRADOR
FROM PRODUTOS
WHERE PRODUTOS.ID_USER = :NEW.ID_USER
OR PRODUTOS.ID_COMPRADOR = :NEW.ID_USER;
contador NUMBER;
soma NUMBER;
res NUMBER;
linha prod%ROWTYPE;
username varchar2(255);
BEGIN
res := 0;
contador := 0;
fetch prod into linha;
username := :NEW.ID_USER;
while prod%found loop
if(linha.ID_user = username)
then
soma := soma + linha.RATING_VENDEDOR;
else
soma := soma + linha.RATING_COMPRADOR;
end if;
contador := contador + 1;
fetch prod into linha;
end loop;
close prod;
res := soma/contador;
update USERS set USERS.RATING = res where USERS.ID_USER = username;
end;
有人可以给我一个提示我怎么能只选择项,其中ID_USER值等于的的ID_USER更新的条目?.. 在此先感谢!
您在文说说'DEALS'表你题。但是你的触发器没有引用该表。我假设触发器是正确的,并且问题的文本是错误的,但如果您能澄清这一点,这将有所帮助。 –
另外,RATING_VENDEDOR表上的'UPDATE'是来自'PRODUTOS'还是'USERS'上的另一个触发器(或另一个触发器调用的代码)上的'UPDATE'? –
@JustinCave抱歉,我写了Deals,因为'produtos'是一个葡萄牙语单词,它可能很奇怪(但我做得更糟,哈哈)我编辑了正确的表名。不,更新RATING_VENDEDOR不是来自另一个触发器,它是一个直接的sql更新命令..again,对不起 –