我是比較新的觸發器,所以原諒我,如果這看起來不應該如此。我創建了一個觸發器,用於檢查上次付款日期的用戶帳戶,如果他們沒有付款,則將值設置爲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