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;

Что я здесь делаю неправильно?


person TAT    schedule 14.01.2016    source источник
comment
Спасибо Сергей Жевжик .. Теперь мой вопрос выглядит намного лучше :)   -  person TAT    schedule 14.01.2016
comment
Это весь код?   -  person Sergii Zhevzhyk    schedule 14.01.2016
comment
Нет Сергей.. cascade_ship_method это отдельная процедура. Без 'execute_query' форма не обновляется, после установки execute_query получаю указанную ошибку. на каком-то форуме я обнаружил, что мы не должны использовать «execute_query» в «WHEN-VALIDATE-ITEM». применимо ли это для 'WHEN-VALIDATE-RECORD'   -  person TAT    schedule 14.01.2016


Ответы (2)


Это связано с тем, что в Oracle Forms есть два типа встроенных процедур — ограниченные и неограниченные. Некоторые триггеры включают ограниченные процедуры, некоторые нет (см. справку по Oracle Forms, каждый триггер содержит информацию о том, какие процедуры он разрешает).

Триггер WHEN-VALIDATE-ITEM срабатывает, например, когда пользователь перемещает курсор с одной записи на другую (это называется навигацией). В этом случае он выходит из одной записи и входит в другую. Срабатывает следующая цепочка триггеров

  • КОГДА-ПРОВЕРИТЬ-ЭЛЕМЕНТ
  • КОГДА-ПРОВЕРИТЬ-ЗАПИСЬ
  • ПОСТ-ПУНКТ
  • ПОСТ-ЗАПИСЬ
  • ПРЕДЗАПИСЬ
  • ПРЕДВАРИТЕЛЬНЫЙ ПУНКТ

Если какой-либо из этих триггеров дает сбой, навигация отменяется и курсор возвращается к исходному элементу. Если вы вызываете любую процедуру, которая запускает новую навигацию (например, GO_BLOCK), Oracle Forms не сможет управлять первой навигацией.

Вот почему некоторые процедуры ограничены.

person Petr Pribyl    schedule 14.01.2016
comment
Привет, Петр... так как же можно добиться этого «обновления»? Сценарий: Когда когда-либо происходит изменение метода доставки заголовка, нам нужно вызвать процедуру для каскадирования строк, а затем ОБНОВИТЬ ее. Я сделал все это, кроме «обновить». Пожалуйста, помогите - person TAT; 15.01.2016
comment
обновление записей является распространенной проблемой в формах оракула. Мы используем два подхода. Если нам нужно обновить одну запись после того, как триггер базы данных изменил ее, мы обновляем ее в триггере POST-UPDATE или POST-INSERT. Мы просто выбираем новые значения в элементы формы. В этих триггерах мы не меняем статус записи. Если нам нужно обновить весь блок или каскад блоков, мы запускаем таймер и делаем обновление в триггере WHEN-TIMER-EXPIRED. - person Petr Pribyl; 15.01.2016
comment
Хорошо, Петр .. спасибо за ваш вклад. позвольте мне попробовать вариант «Постобновление» или «Пост-вставка». большое спасибо :) - person TAT; 15.01.2016

Это может иметь отношение к содержимому cascade_ship_method. Когда я получил эту ошибку, я пропустил апостроф в выражении SET_BLOCK_PROPERTY. Когда исправил, все заработало. Это правильная структура в моем блоке кода:

SET_BLOCK_PROPERTY (
                  'TABLE_A',
                  default_where,
                     'column_a= '
                  || ''''
                  || variable
                  || '''');
person phileoseda    schedule 19.03.2019