0

更新トリガーを作成しようとしていますが、「変化するテーブル」エラーが発生し続けます。主なアイデアは、ユーザー評価の販売と購入のデータベースです。基本的に、PRODUTOS テーブルの評価が更新されるたびに、売り手の評価を再計算したいと考えています。次のトリガー(およびそのバージョン)を試していますが、どこにも行きません..

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 と等しいエントリのみを選択するにはどうすればよいですか?.. よろしくお願いします!

4

1 に答える 1

0

表の評価がUSERS最新の場合は、最新の変更された評価を追加するだけです。

CREATE OR REPLACE TRIGGER actualiza_rating_vend
  AFTER UPDATE ON produtos FOR EACH ROW
BEGIN
   UPDATE users 
      SET user_rating = user_rating + :new.rating_vendedor - :old.rating_vendedor
    WHERE id_user = :new.id_user;

   UPDATE users 
      SET user_rating = user_rating + :new.rating_comprador - :old.rating_comprador
   WHERE id_user = :new.id_comprador;

END actualiza_rating_vend;

/

于 2012-12-17T15:48:35.037 に答える