PLSQL Trigger ORA 01403 данные не найдены
Я делаю триггер в PL-SQL, чтобы ограничить сотрудников в разделе / отдел в моей форме ввода сотрудника я получаю ORA-01403: данные не найдены. пожалуйста, кто-нибудь, помогите мне
create or replace trigger DEPT_STRENTH
after insert on empmasterinfo
for each row
DECLARE
-- local variables here
EMP_Count NUMBER;
MAX_Strength NUMBER;
V_Mainid VARCHAR2(100);
V_orgelementname VARCHAR2(100);
BEGIN
--taking value from form
V_Mainid := :new.mainid;
V_orgelementname := :new.orgelementname;
--Comparing values with existing
select d.strength
into MAX_Strength
from dept_strength d
-- Master table
where d.Mainid = V_Mainid
and d.orgelementname = V_orgelementname;
select count(e.employeeid)
into EMP_Count
-- Master table
from empmasterinfo e
where e.emp_status = 0
and e.Mainid = V_Mainid
and e.orgelementname = V_orgelementname;
if EMP_Count >= MAX_Strength then
RAISE_APPLICATION_ERROR(-20101,
'Maximum Number of Employees in Department Reached');
end if;
end DEPT_STRENTH;
1 ответ
Это упражнение в отладке вашего кода.
Шаг первый - посмотреть, что вы написали. Исключение NO_DATA_FOUND генерируется запросом, который не возвращает строк. У вас есть два запроса в вашем триггере. Однако запросы агрегации не вызывают это исключение, поскольку счетчик вернет 0.
Таким образом, ORA-01403 может отбрасывать только один запрос, что ясно указывает на то, что в dept_strength
которые соответствуют строкам, которые вы вставляете в empmasterinfo
, Предположительно, вы думаете, что в этой таблице должны быть строки, и в этом случае вам нужно пересмотреть свою транзакционную логику.
В любом случае, вам, вероятно, следовало бы это сделать, поскольку попытка применить такое бизнес-правило в триггере - плохая ошибка. Он не масштабируется и не работает в многопользовательской среде.