Существуют ли замены OCI8 для ADO MoveFirst и EOF, BOF?

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

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

Не могу найти в модуле OCI аналогичного функционала. Есть ли надежда?


person mggates    schedule 15.07.2010    source источник


Ответы (1)


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


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

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

person Allan    schedule 15.07.2010
comment
Метод массива будет работать для некоторых из наших меньших наборов данных, но у нас есть некоторые, возможно, большие, и мне придется придумать другой способ справиться с навигацией. - person mggates; 15.07.2010
comment
В основном они выбирают набор записей, а затем просматривают его и выполняют действия с каждой строкой. Оказывается, им просто нужна была эмуляция EOF, BOF и MoveNext. Насколько я понимаю, Oracle поддерживает динамические курсоры, начиная с 9i, ​​однако интерфейс OCI8 не обновлялся для их поддержки. Тем не менее, благодаря вашим предложениям и некоторым, которые я нашел на других форумах, у меня есть небольшой класс RecordSet, который дает мне поведение, которое мне нужно для других программистов. - person mggates; 19.07.2010