Процесс страницы Oracle Apex, вызывающий хранимую процедуру, не работает.

Вопрос или проблема

Я создал страницу мастер-деталей. На главной странице я создал процесс страницы, который вызывает хранимую процедуру при нажатии кнопки и сохраняет основную запись в таблице, что работает как и ожидалось. На странице деталей я создал аналогичный процесс страницы, который вызывает хранимую процедуру при нажатии кнопки и ожидается, что он сохранит записи деталей в таблице, но когда кнопка нажата, появляется сообщение “Строки успешно обновлены”, но на самом деле никаких строк не было вставлено в таблицу. Не могу понять, почему запись не вставляется в таблицу. Процедура работает хорошо, когда вызывается напрямую из базы данных.

Вот мой процесс страницы – Вставка опции
Процесс страницы

Свойства процесса страницы

Свойства процесса страницы

Вот страница, на которой я добавляю запись деталей.

Добавление записи деталей

Когда я нажал кнопку Создать, запись не была вставлена в таблицу.

после нажатия кнопки Создать

Я ожидаю, что запись будет вставлена в таблицу деталей.

Ответ или решение

Основные шаги для устранения проблемы с вызовом хранимой процедуры в Oracle APEX

Ваша проблема заключается в том, что на странице деталей в Oracle APEX по нажатию кнопки создается сообщение "Rows Updated Successfully", однако фактически записи не добавляются в таблицу. Рассмотрим возможные причины и шаги для их устранения.

1. Проверьте параметры, передаваемые в хранимую процедуру

Убедитесь, что все параметры, передаваемые в хранимую процедуру, корректны. При использовании APEX важно, чтобы значения элементов страницы, которые передаются в процедуру, имели правильные значения и типы. Включите отладку в APEX, чтобы проверить, какие значения фактически передаются в хранимую процедуру:

BEGIN
   your_stored_procedure(:param1, :param2, ...);
   DBMS_OUTPUT.PUT_LINE('Param1: ' || :param1);
   DBMS_OUTPUT.PUT_LINE('Param2: ' || :param2);
END;

2. Проверьте логи на наличие ошибок

Включите трассировку и проверьте журналы APEX (например, используя DBMS_OUTPUT или APEX_DEBUG). Убедитесь, что процесс выполняется без ошибок, даже если он возвращает сообщение о успешном выполнении. Проверьте, выдает ли ваша процедура какие-либо предупреждения или ошибки, когда вызывается из APEX.

3. Проверьте комбинации триггеров

Если в таблице имеют место триггеры на вставку или обновление, убедитесь, что они не блокируют вставку записи. Триггеры могут изменять или отменять операции DML, и это может быть причиной, по которой ваши записи не вставляются.

4. Проверьте уровень доступа

Убедитесь, что у пользователя, под которым выполняется запрос APEX, есть необходимые права доступа для выполнения данной хранимой процедуры и вставки данных в таблицу. Права могут быть ограничены на уровне схемы или базы данных.

5. Параметры архитектуры APEX

Убедитесь, что процесс страницы настроен на "Сохранить состояние" или "Сохранить изменения". Посмотрите, как настроена передача данных на странице и их валидация.

6. Тестирование процедуры

Поскольку вы упомянули, что процедура работает при вызове напрямую из базы данных, можно попробовать выполнить procédure с использованием аналогичного блока PL/SQL в APEX, чтобы убедиться, что она выполняется корректно:

BEGIN
   your_stored_procedure('test_value1', 'test_value2');
END;

Если это работает, ваша проблема может быть в способе передачи параметров из APEX.

7. Перепроверьте настройки APEX

Убедитесь, что ваш процесс страницы настроен правильно. Проверьте следующие параметры:

  • На вкладке "Процесс" включите опцию Фаза выполнения, чтобы убедиться, что процесс выполняется на правильной стадии. Например, для вставки желательно использовать После <после обработки>.
  • Убедитесь, что оба процесса (как на главной странице, так и на странице деталей) настроены аналогично.

Заключение

Проблема может быть вызвана различными факторами, поэтому важно действовать шаг за шагом, чтобы точно идентифицировать источник ошибки. Попробуйте вышеуказанные решения, и, скорее всего, вы сможете найти и исправить причину, по которой записи не добавляются в таблицу при вызове хранимой процедуры из APEX.

Оцените материал
Добавить комментарий

Капча загружается...