Oracle SP和触发器只能成功运行一次

问题描述:

我有一个奇怪的需求来编写触发器和/或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; 

任何帮助表示赞赏。

+0

我应该注意到SP中的插入也每次都运行,只是从第一次运行的密钥库中删除 – user2219930

+0

DELETE FROM KEYSTORE是否删除表中的所有对象,包括触发器? – Dru

行如何重新插入到KEYSTORE表中?您是否通过单独的会话手动插入这些文件,在下次登录尝试失败之前提交?我想起了这个线程中的注释:Oracle stored procedure needs recompilation to fetch table data