0
votes

Comment mettre à jour la valeur d'une autre table en utilisant la gâchette d'insertion d'une autre table

Je travaille sur un projet de base de données sur le système électoral national. Tout en casting, vote pour un certain candidat, je souhaite mettre à jour automatiquement TOTAL_VOTES +1 dans la table des résultats. Le total_votes de tous les candidats est initié à zéro. J'ai écrit une gâchette, mais cela ne fonctionne pas xxx

/ je veux que la gâchette fonctionne /


0 commentaires

3 Réponses :


0
votes

Essayez ceci, il devrait fonctionner

CREATE OR REPLACE TRIGGER tvc
AFTER INSERT ON cast_vote
REFERENCING NEW AS newRow OLD AS oldRow
FOR EACH ROW
DECLARE
initialcnt number;
BEGIN
       SELECT COUNT(*) INTO initialcnt FROM results;
       IF(initialcnt=0) THEN
          INSERT INTO results VALUES(:newRow.can_id,1);
       ELSE
          UPDATE results SET total_vote =(select max(total_vote) from 
         results where can_id=:newRow.can_id)+1 where can_id=:newRow.can_id;
END tvc;


0 commentaires

0
votes

Initialement, il n'y a pas de lignes dans les résultats résultats de sorte qu'il n'y a rien à mettre à jour; insérer une ligne d'abord. xxx

test: xxx


0 commentaires

-1
votes

Si "total_votes de tous les candidats est initié à zéro" signifie qu'il y a une ligne pour chaque candidat avec un vote 0 Tally défini initialement alors les œuvres suivantes (presque ce que vous aviez): 1. Supprimer le déclarer, il inutile, ou inverse-le et "pour chaque rangée".
2. Changer: OLD.CAN_ID = R.CAN_ID; à: new.can_id = r.can_id; Dans un déclencheur d'insertion: Vieux n'existe pas (vous pouvez le faire référence, mais toutes les colonnes sont nuls).
S'il est possible que le total des votes ne soit pas initialisé, utilisez la fusion.

create or replace Trigger tvc
    before insert
    on cast_vote
    for each row   
begin
  merge into results r
  using (select :new.can_id newid from dual) 
     on (newid = r.id)
   when matched then  
        update set total_vote = total_vote+1
   when not matched then 
        insert (id,total_vote) values(newid,1);
end tvc;


0 commentaires