Sie brauchen kein UPDATE
innerhalb eines Triggers. Sie können den Wert NEW.votes_used
zuweisen
Verwenden Sie so etwas wie:
BEGIN
IF (NEW.votes_used > (SELECT votes_available FROM vote_totals
WHERE vote_totals.user_id = NEW.user_id)) THEN
NEW.votes_used := (SELECT votes_available FROM vote_totals
WHERE vote_totals.userID = NEW.user_id);
END IF;
RETURN NEW;
END;
Oder
BEGIN
NEW.votes_used := LEAST(NEW.votes_used, (SELECT votes_available
FROM vote_totals
WHERE vote_totals.userID = NEW.user_id));
RETURN NEW;
END;
Dies muss ein BEFORE UPDATE
sein Auslöser zur Arbeit. (Und wie alle BEFORE UPDATE
Trigger muss es RETURN NEW
).
Wenn Sie Check Constraint mit Trigger emulieren möchten, versuchen Sie etwas wie:
BEGIN
IF (NEW.votes_used > (SELECT votes_available
FROM vote_totals
WHERE vote_totals.user_id = NEW.user_id))
THEN RAISE EXCEPTION 'Not enough votes';
END IF;
RETURN NEW;
END;