2010-07-15 3 views
1

Я изучаю возможность переноса приложения, написанного на классическом ASP с наборами записей ADO и базы данных Oracle, на PHP5 и OCI8. У нас есть много хранимых процедур и запросов с переменными привязки для производительности.Есть ли замены OCI8 для ADO MoveFirst и EOF, BOF?

Моя проблема в том, что мы стали ленивы использовать классы ADO и индикаторы EOF и BOF вместе с MoveFirst, MoveNext и MovePrevious.

Я не могу найти подобных функций в модуле OCI. Есть ли надежда?

ответ

0

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


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

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

+0

Метод массива будет работать для некоторых из наших меньших наборов данных, но у нас есть некоторые, возможно, большие, которые мне придется выяснить, другой способ справиться с навигацией. – mggates

+0

В основном они выбирают набор записей, а затем проходят его и выполняют действия в каждой строке. Оказывается, им просто нужны эмуляция EOF, BOF и MoveNext. Как я понимаю, Oracle поддерживает динамические курсоры, поскольку 9i, однако интерфейс OCI8 не обновлен для их поддержки. По-прежнему благодаря вашим предложениям и некоторым, которые я нашел на других форумах, у меня есть небольшой класс «RecordSet», который дает мне поведение, которое мне нужно для других программистов. – mggates

Смежные вопросы