Проблема PHP с выбором из глобальной временной таблицы Oracle


У меня есть глобальная временная таблица Oracle, которая находится "ПРИ ФИКСАЦИИ СТРОК УДАЛЕНИЯ".

У меня есть цикл, в котором я:

  • Вставить в глобальную временную таблицу
  • Выбор из глобальной временной таблицы (постобработка)
  • Зафиксируйте, чтобы таблица была очищена перед следующей итерацией цикла

Вставка выполняется с помощью вызова oci_execute ($stmt, OCI_DEFAULT). Извлечение производится с помощью вызова oci_fetch_all($stmt, $result, 0, -1, OCI_FETCHSTATEMENT_BY_ROW |OCI_ASSOC). После этого выполняется фиксация: oci_commit().

Проблема в том, что поиск иногда работает, и иногда я получаю одну из следующих ошибок:

  • ORA-08103: объект больше не существует
  • ORA-01410: недопустимый ИДЕНТИФИКАТОР СТРОКИ

Как будто сеанс не может "видеть" записи, которые он ранее вставил.

У вас есть какие-либо идеи о том, что может быть причиной этого?

Спасибо.

Author: Dario, 2010-05-04

1 answers

Используете ли вы пул соединений? Если это так, то может быть, что разные вызовы выполняются в отдельных сеансах.

Лучшим решением было бы иметь единую процедуру PL/SQL, которая заполняет временную таблицу и возвращает набор результатов за один вызов. Что затем предлагает еще лучшее решение: полностью отказаться от временного стола.

В Oracle существует несколько ситуаций, требующих использования временных таблиц. Большинство вещей решаемы с помощью чистого SQL или, возможно, массовый сбор во вложенные таблицы. Какие фактические манипуляции с данными во временной таблице вы выполняете между вставкой и последующим выбором?

Редактировать

Временные таблицы имеют снижение производительности - строки записываются на диск. Коллекции PL/SQL остаются в (сессионной) памяти и поэтому работают быстрее. Конечно, поскольку они находятся в памяти сеанса, они не решат проблему с объединением соединений.

Это причина, по которой вам нужно разделите данные на части, потому что вы не хотите передавать 200 000 строк в свой PHP одним махом? Я думаю, что мне нужно немного больше контекста, если я хочу помочь вам в дальнейшем.

 2
Author: APC, 2010-05-04 13:31:32