Ich bin relativ neu zu Triggern, also vergib mir, wenn das nicht so aussieht wie es sollte. Ich erstelle einen Trigger, der ein Benutzerkonto auf das letzte Zahlungsdatum überprüft und einen Wert auf 0 setzt, wenn sie eine Weile nicht bezahlt haben. Ich habe erstellt, was ich dachte, war ein richtiger Auslöser, aber ich bekomme den Fehler, "Fehler während der Ausführung von Trigger", wenn es ausgelöst wird. Nach meinem Verständnis verursacht die Select-Anweisung den Fehler, wenn Werte ausgewählt werden, die gerade geändert werden. Hier ist mein Code.Fehler bei der Ausführung des Triggers. So bearbeiten Sie Select-Anweisungen
CREATE OR REPLACE TRIGGER t
BEFORE
UPDATE OF LASTLOGINDATE
ON USERS
FOR EACH ROW
DECLARE
USER_CHECK NUMBER;
PAYMENTDATE_CHECK DATE;
ISACTIVE_CHECK CHAR(1);
BEGIN
SELECT U.USERID, U.ISACTIVE, UP.PAYMENTDATE
INTO USER_CHECK, PAYMENTDATE_CHECK, ISACTIVE_CHECK
FROM USERS U JOIN USERPAYMENTS UP ON U.USERID = UP.USERID
WHERE UP.PAYMENTDATE < TRUNC(SYSDATE-60);
IF ISACTIVE_CHECK = 1 THEN
UPDATE USERS U
SET ISACTIVE = 0
WHERE U.USERID = USER_CHECK;
INSERT INTO DEACTIVATEDUSERS
VALUES(USER_CHECK,SYSDATE);
END IF;
END;
Von dem, was ich dachte, da die Auswahl in der Erklärung beginnen, wäre es vor einem Update ausführen, würde nichts über die Tabellen durch den Auslöser erst nach, wenn laufen Ändern werden. Ich habe versucht, aber mit: alt vor den ausgewählten Variablen, aber das scheint nicht die richtige Verwendung zu sein.
Und hier ist die Update-Anweisung, die ich versuchte.
UPDATE USERS
SET LASTLOGINDATE = SYSDATE
WHERE USERID = 5;
Kann es mehr Benutzerdaten pro Benutzer geben? – trincot
Ja könnte es sein. Es ist ein Rekord für jede Zahlung. – rinaldo13531