powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Обработка ошибки триггера ON-DELETE
6 сообщений из 6, страница 1 из 1
Обработка ошибки триггера ON-DELETE
    #38163122
student42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги добрый день!
Вопрос собственно следующий, при выполнении процедуры происходит удаление записей из блока,
после команды POST отрабатывает триггер ON-DELETE котором происходит ошибка, но почему-то процедура
продолжает свою работу. Как можно остановить выполнение процедуры в следствии ошибки в триггере
ON-DETELE? ниже собственно примерный код:

Триггер ON-DELETE
Код: plsql
1.
2.
3.
4.
5.
6.
BEGIN
  PKG_DOCITEM.PROCESSING_ITEM (
  , P_DOC_ID      => :DOCITEM.DOC_ID
  , P_DOC_ITEM_ID => :DOCITEM.DOC_ITEM_ID
  );
END;



Процедура
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
PROCEDURE DELETE_ITEMS
IS
BEGIN
     GO_BLOCK('DOCITEM');
     FIRST_RECORD;
     WHILE :SYSTEM.LAST_RECORD <> 'TRUE' LOOP
		IF :DOCITEM.SELECTED = 1 THEN
			DELETE_RECORD;
			POST;
		ELSE
			NEXT_RECORD;	
		END IF;
    END LOOP;
    IF :SYSTEM.LAST_RECORD = 'TRUE' AND :DOCITEM.SELECTED = 1 THEN
    	DELETE_RECORD;
    	POST;
    END IF;
END;
...
Рейтинг: 0 / 0
Обработка ошибки триггера ON-DELETE
    #38164905
student42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
student42,

Как проблему решил я (т.к. ненашел ответа):

В триггере ON-ERROR в момент обработки ошибки ORA-00001 (собственно именно это ошибка и возникала)
я устанавливаю значение глобальной переменной
Триггер ON-ERROR
Код: plsql
1.
2.
3.
4.
5.
6.
7.
BEGIN
...
ELSIF DBMS_CODE = -1 THEN
   сообщение пользователю о ошибке;
   :GLOBAL.DOCITEM_ERROR_CODE = -1;
...
END;


В процедуре добавляю что-типа следующего
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN
...
  WHILE...
   ...
   IF :GLOBAL.DOCITEM_ERROR_CODE = -1 THEN
     RAISE Form_Trigger_Failure;
   END IF;
   ...
  END LOOP;
...
END;



Это безусловно не элегантное решение! Но работает.
Буду благодарен если посоветуете более корретный выход
из текущей ситуации.
...
Рейтинг: 0 / 0
Обработка ошибки триггера ON-DELETE
    #38165740
Ирина В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
student42,
в триггере:
Код: sql
1.
2.
3.
4.
EXCEPTION
WHEN OTHERS THEN
        message(SQLCODE||' '||SQLERRM);
	RAISE FORM_TRIGGER_FAILURE;	


Это к примеру.
...
Рейтинг: 0 / 0
Обработка ошибки триггера ON-DELETE
    #38165970
student42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ирина В.student42,
в триггере:
Код: sql
1.
2.
3.
4.
EXCEPTION
WHEN OTHERS THEN
        message(SQLCODE||' '||SQLERRM);
	RAISE FORM_TRIGGER_FAILURE;	


Это к примеру.

Добрый день, Ирина.
Вы заблуждаетесь. Этот вариант я пробовал.
...
Рейтинг: 0 / 0
Обработка ошибки триггера ON-DELETE
    #38166077
Ирина В.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
student42Вы заблуждаетесь. Этот вариант я пробовал.

какие form's?
...
Рейтинг: 0 / 0
Обработка ошибки триггера ON-DELETE
    #38166427
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
student42,

Встроенные подпрограммы Oracle Forms всегда отрабатывают не вызывая исключений, даже при неудачном завершении.
Статус завершения процедур проверяется при помощи функции form_success.

В твоем случае нужно, что-то типа такого:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
while...
   delete_record;
   if not form_success
   then
      raise form_trigger_failure;
   end if;
...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Обработка ошибки триггера ON-DELETE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]