Подавление ошибок
Опция NO-ERROR в операторе ABL полностью подавляет обработку ошибок:
- Не выводится никаких сообщений.
- Выполнение продолжается со следующего оператора.
- Управление не передается обработчику ошибок блока.
Замечание: Опция NO-ERROR не подавляет состояние STOP.
Для справки, смотри OpenEdge Development: ABL Reference. В некоторых случаях действие опции NO-ERROR может отличаться от стандартного, в зависимости от конкретного оператора.
Если в операторе с опцией NO-ERROR происходит ошибка, оператор не выполняется (прерывается), и выполнение продолжается со следующего оператора. Любые изменения в базе данных, которые были выполнены ошибочным оператором, будут откачены. Если оператор включает выражения, содержащие другие исполняемые элементы, работа, выполняемая этими элементами, может быть, а может и не быть выполнена, в зависимости от порядка, в котором AVM вычисляет выражения, и от места, где происходит ошибка.
В примере (Программа 26) внутренняя процедура возвращает управление вызывающей процедуре с установкой состояния ERROR. Однако оператор RUN имеет опцию NO-ERROR. Последний оператор DISPLAY будет выполнен, так как обработка ERROR в операторе RUN будет подавлена.
Программа 26. Подавление ошибок.
PROCEDURE NestedBlocks: Outer-Block: FOR EACH Customer WHERE CustNum < 5: ASSIGN Customer.Name = Customer.Name + “_changed”. Inner-Block: FOR EACH Order OF Customer ON ERROR UNDO Outer-Block, RETURN ERROR: DISPLAY OrderNum. /* Nonsense code raises ERROR. */ FIND SalesRep WHERE RepName = Customer.Name. END. END. DISPLAY "For Blocks Complete". END PROCEDURE. RUN NestedBlocks NO-ERROR. DISPLAY "Procedure NestedBlocks Complete."