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, Предположительно, вы думаете, что в этой таблице должны быть строки, и в этом случае вам нужно пересмотреть свою транзакционную логику.

В любом случае, вам, вероятно, следовало бы это сделать, поскольку попытка применить такое бизнес-правило в триггере - плохая ошибка. Он не масштабируется и не работает в многопользовательской среде.

Другие вопросы по тегам