我有一个奇怪的需要编写一个触发器和/或 SP,如果数据库注意到 3 次登录失败,它将删除表中的所有行。奇怪的是,当我运行它时,触发器每次都会触发,SP 也是如此,但是,SP 只会在我第一次登录失败 3 次时删除记录。所以,如果我登录失败 3 次,触发器调用 sp 并删除记录,但如果我向表中添加另一条记录,并且再次登录失败,它不会删除记录,除非我重新编译 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;
任何帮助表示赞赏。