Oracle Forms Execute_query, выдающий ошибку FRM-40737
Я получаю ошибку
FRM - 40737 - недопустимая ограниченная процедура GO_BLOCK в триггере WHEN-VALIDATE-RECORD.
Мой код
IF event_name = 'WHEN-VALIDATE-RECORD'
THEN
IF (form_name = 'OEXOEORD' AND block_name = 'ORDER')
THEN
-- call procedure to validate and cascade the ship method code.
cascade_ship_method;
execute_query;
END IF;
Что я здесь не так делаю?
1 ответ
Это связано с тем, что в Oracle Forms есть два типа встроенных процедур - ограниченные и неограниченные. Некоторые триггеры включают ограниченные процедуры, некоторые нет (см. Справку Oracle Forms, каждый триггер имеет информацию о том, какие процедуры он включает).
Триггер WHEN-VALIDATE-ITEM срабатывает, например, когда пользователь перемещает курсор от одной записи к другой (это называется навигацией). В этом случае он оставляет одну запись и вводит другую. Срабатывает следующая цепочка триггеров
- КОГДА-VALIDATE-ITEM
- КОГДА-VALIDATE-RECORD
- POST-ITEM
- POST-RECORD
- PRE-RECORD
- PRE-ITEM
В случае сбоя любого из этих триггеров навигация отменяется, и курсор возвращается к исходному элементу. Если вы вызываете любую процедуру, которая запускает новую навигацию (например, GO_BLOCK), Oracle Forms не сможет управлять первой навигацией.
Вот почему некоторые процедуры ограничены.
Это может быть связано с содержанием cascade_ship_method
, Когда я получил эту ошибку, я пропустил апостроф в SET_BLOCK_PROPERTY
заявление. Когда я починил, все заработало. Это правильная структура в моем блоке кода:
SET_BLOCK_PROPERTY (
'TABLE_A',
default_where,
'column_a= '
|| ''''
|| variable
|| '''');