Я столкнулся с проблемой при создании триггера БД, чтобы вызвать сообщение об ошибке для форм оракула.Не могли бы вы мне помочь?
Мой код:
CREATE OR REPLACE TRIGGER unsuccessful_attempts_lock
BEFORE UPDATE of last_logon_date
ON temp_user
FOR EACH ROW
DECLARE
CURSOR c_unsuccessful_attempts IS
SELECT *
FROM temp_unsuccessful_attempts
WHERE user_id=:NEW.user_id;
max_fails EXCEPTION;
BEGIN
FOR r_unsuccessful_attempts IN c_unsuccessful_attempts
LOOP
IF(r_unsuccessful_attempts.locked ='Y') THEN
RAISE max_fails;
END IF;
END LOOP;
EXCEPTION
WHEN max_fails THEN
FND_MESSAGE.SET_NAME ('FND', 'FLEX-USER DEFINED ERROR');
FND_MESSAGE.SET_TOKEN ('MSG', 'You have reached maximum failed logins.
This account has been locked temporarily. Please contact
your system administrator')
FND_MESSAGE.RAISE_ERROR;
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20400,'An error has occured.Please contact
your system administrator'||SQLCODE||SQLERRM);
END unsuccessful_attempts_lock;
Когда учетная запись пользователя заблокирована, temp_unsuccessful_attempts.locked
будет обновлено до 'Y', и он / она не долженвозможность войти в систему дальше.И temp_user
- это таблица, которая обновляется при успешном входе пользователя в систему.
Итак, когда учетная запись пользователя заблокирована (temp_unsuccessful_attempts.locked='Y'
), а затем, если он попытается войти в систему со своим правильным паролемЭтот триггер должен сработать (после обновления таблицы temp_user
), а форма должна выдать ошибку о том, что его учетная запись заблокирована и не должна двигаться дальше.
Сообщение, которое я получаю:
Ошибка ORACLE -20001: ORA-20001: ОШИБКА, ОПРЕДЕЛЕННАЯ ПОЛЬЗОВАТЕЛЕМ FLEX: N, MSG, Вы достигли максимального числа неудачных входов в систему.Обратитесь к системному администратору.
ORA-06512: по адресу "APPS.FND_MESSAGE", строка 66
ORA-06512: по адресу "APPS.UNSUCCESSFUL_ATTEMPTS_LOCKS", строка 38
ORA-04088: ошибка при освобождении триггера 'APPS.UNSUCCESSFUL_ATTEMPTS_LOCKS' обнаружена в FND_SIGNON.NEW_SESSION.
Мой триггер выдает дополнительное сообщение на экране приложений оракула.Я просто хочу отобразить
Вы достигли максимального числа неудачных входов в систему. Ваша учетная запись временно заблокирована. Пожалуйста, свяжитесь со службой поддержки.
PS: FND_SIGNON.NEW_SESSION
- это процедура, в которойОбновляется файл temp_user.last_logon_date.