0
我有一個奇怪的需求來編寫觸發器和/或SP,如果數據庫發現3個登錄失敗,將刪除表中的所有行。奇怪的是,當我運行這個程序時,每次都會觸發triger,而SP也是如此,但是SP僅在第一次登錄失敗時才刪除記錄3次。因此,如果我登錄失敗3次,觸發器會調用sp並刪除記錄,但是如果我向表中添加另一條記錄並再次登錄失敗,它不會刪除記錄,除非我重新編譯SP和運行另一個登錄失敗。Oracle SP和觸發器只能成功運行一次
目前我有這個作爲觸發
create or replace
TRIGGER TRIG_Failed_Login
after servererror on database
BEGIN
If (ORA_IS_SERVERERROR(1017)) Then
insert into ERRORTRAP (errormessage, message_timestamp) VALUES ('Failed Login - 1017', current_timestamp);
commit;
BEGIN
sp_trucate_keystore();
END;
END IF;
End;
,並以此爲SP:
create or replace
PROCEDURE sp_Trucate_KeyStore is
RECORD_COUNT NUMBER;
begin
SELECT COUNT(*) INTO RECORD_COUNT FROM ERRORTRAP;
BEGIN
IF RECORD_COUNT >= 3 THEN
INSERT INTO errortrap (errormessage) VALUES ('this is a test');
DELETE FROM KEYSTORE;
COMMIT;
END IF;
END;
END;
任何幫助表示讚賞。
我應該注意到SP中的插入也每次都運行,只是從第一次運行的密鑰庫中刪除 – user2219930
DELETE FROM KEYSTORE是否刪除表中的所有對象,包括觸發器? – Dru