這是我的代碼:獲取屏幕上的一些額外的異常和消息時,我的觸發器被炒魷魚
CREATE OR REPLACE TRIGGER unsuccessful_logins
AFTER INSERT OR UPDATE
ON temp_logins
for each row
DECLARE
CURSOR c_unsuccessful_attempts
IS
SELECT * from temp_attempts
and user_id= :new.user_id;
max_fails EXCEPTION;
BEGIN
FOR r_unsuccessful_attempts in c_unsuccessful_attempts
LOOP
if(:new.user_id = r_unsuccessful_attempts.user_id) then
if (r_unsuccessful_attempts.locked = 'Y') then
raise max_fails;
end if;
else
null;
end if;
END LOOP;
EXCEPTION
WHEN max_fails THEN
RAISE_APPLICATION_ERROR (-20300,'User '''||:new.login_name||''' has reached maximum failed logins. Please contact your system administrator ');
END unsuccessful_logins;
我在我的Oracle應用程序的屏幕得到的錯誤是:
APP-01564: ORACLE error 20300 in fdssgn
cause: fdssgn failed due to ORA-20300: You have reached maximum failed logins. Please contact your system administrator.
ORA-06512: at "APPS.UNSUCCESSFUL_LOGINS",line 24
ORA-04088: error during excution of trigger 'APPS.UNSUCCESSFUL_LOGINS'.
的SQL語句在錯誤的時間被執行爲: INSERT INTO TEMP_LOGINS(USER_ID,ATTEMPT_TIME,TERMINAL_ID,LOGIN_NAME) 值(:USER_ID,SYSDATE,:erminal_id,:LOGIN_NAME)
我只是想顯示ORA-20300: You have reached maximum failed logins. Please contact your system administrator
部分。
而想要忽略:
ORA-06512: at "APPS.UNSUCCESSFUL_LOGINS",line 24
ORA-04088: error during excution of trigger 'APPS.UNSUCCESSFUL_LOGINS'.
The SQL statement being executed at the time of the error was:
INSERT INTO TEMP_LOGINS (USER_ID, ATTEMPT_TIME,TERMINAL_ID,LOGIN_NAME)
values(:user_id, sysdate,:erminal_id,:login_name)
我怎樣才能獲得在屏幕上驅除掉這些額外的信息?
什麼是你看到的消息和錯誤?什麼是表格定義? (爲什麼你一直使用遊標;甚至不把用戶ID作爲參數傳遞給它?) –
你得到了什麼額外的例外和消息?另外,當你可以直接查詢你感興趣的鎖定記錄時,爲什麼要從temp_attempts表中拉出所有記錄並循環它們呢? –
+1給亞歷克斯說我在發佈之前的想法。 –