Oracle SP和Trigger仅成功运行一次

时间:2013-10-11 00:44:56

标签: sql oracle stored-procedures plsql triggers

我有一个奇怪的需要来编写一个触发器和/或SP,如果数据库注意到登录失败,将删除表中的所有行。奇怪的是,当我运行它时,triger每次都会触发,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;

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如何将行重新插入KEYSTORE表?您是否通过单独的会话手动插入这些会话,在下次登录尝试失败之前提交?我被提醒注意这个帖子中的评论:Oracle stored procedure needs recompilation to fetch table data