我想使用raise_application_error-過程來停止登錄過程。 我寫了一個觸發器,它檢查TERMINAL字符串,如果它是正確的(我知道這不是真的安全,但起初,它已足夠) 因此,觸發器工作正常,做我想做的事情,但raise_application_error原因回滾並且不發送我想要的異常。當我用我的應用程序登錄數據庫時,raise_application_error不會停止應用程序。 第一個問題:這是否是正確的方法,停止使用錯誤的應用程序登錄數據庫?第二個問題:如果是,有什麼不對?Oracle觸發器:raise_application_error
create or replace
TRIGGER after_logon_on_database
AFTER LOGON ON DATABASE
BEGIN
IF sys_context('USERENV', 'TERMINAL')='IAS' THEN
INSERT INTO event_log
(event_date, event_time, username, event_case, event_comment)
VALUES
(SYSDATE, to_char(sysdate, 'hh24:mi:ss'), USER, 'LOGON-SUCCESS', sys_context('USERENV', 'TERMINAL'));
ELSE
INSERT INTO event_log
(event_date, event_time, username, event_case, event_comment)
VALUES
(SYSDATE, to_char(sysdate, 'hh24:mi:ss'), USER, 'LOGON-FAILURE', sys_context('USERENV', 'TERMINAL'));
RAISE_APPLICATION_ERROR(-20001, 'Access denied!');
END IF;
END after_logon_on_database;