我是比较新的触发器,所以原谅我,如果这看起来不应该如此。我创建了一个触发器,用于检查上次付款日期的用户帐户,如果他们没有付款,则将值设置为0。我创建了我认为是正确的触发器,但当触发它时,我得到错误“触发器执行期间的错误”。据我所知,select语句在选择正在被更改的值时会导致错误。这是我的代码。执行触发器时出错。如何重新选择语句?
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;
从我心想,既然选择是在开始的语句,它会运行一个更新之前,不会有任何改变有关的表,直到后,如果通过触发运行。我尝试过,但是在选择变量前面使用:old,但似乎没有正确的用法。
这里是我试图更新的声明。
UPDATE USERS
SET LASTLOGINDATE = SYSDATE
WHERE USERID = 5;
每个用户可以有多个用户付款记录吗? – trincot
是的,可以。这是每次付款时的记录。 – rinaldo13531