2013-11-23 1 views
-1

Я делаю триггер в PL-SQL, чтобы ограничить сотрудников в разделе/​​отдел в моей форме ввода сотрудника i получить ORA-01403: данных не найдено. пожалуйста кто-нибудь помочь мнеPLSQL Trigger 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; 
+0

Когда вы получите это сообщение? Когда срабатывает триггер? Что еще более важно, вы проводили _any_ исследование в Интернете? Просто googling 'ORA-01403' возвращает много полезных хитов. –

+0

да, я делаю googly, но все же не получаю желаемого результата. запускать огонь перед вставкой на стол. когда кто-то вводит новую запись в таблицу – user3024346

ответ

2

Это упражнение в отладке кода.

Первый шаг - посмотреть, что вы написали. Исключение NO_DATA_FOUND генерируется запросом, который не возвращает строк. У вас есть два запроса в вашем триггере. Однако запросы агрегации не поднимают это исключение, так как счетчик вернет 0.

Таким образом, только один запрос может указывать на ORA-01403, в котором четко указано, что у вас нет строк в dept_strength, которые соответствуют строкам, повторная установка в empmasterinfo. Предположительно, вы думаете, что у вас должны быть строки в этой таблице, и в этом случае вам нужно пересмотреть свою транзакционную логику.

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

+1

Поскольку триггер представляет собой триггер уровня на 'empmasterinfo', я предполагаю, что это связано с ожидаемыми данными, которые не найдены. И как только текущая проблема будет исправлена, следующий вопрос будет вызван тем, что триггер бросает мутирующую ошибку запуска. –

+0

@JustinCave - Именно так. – APC