2013-10-11 36 views
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; 

任何幫助表示讚賞。

+0

我應該注意到SP中的插入也每次都運行,只是從第一次運行的密鑰庫中刪除 – user2219930

+0

DELETE FROM KEYSTORE是否刪除表中的所有對象,包括觸發器? – Dru

回答