[ОТВЕТИТЬ]
Опции темы
01.06.2007 13:18  
Pyatak
Возможно ли и как выбрать только определенные строки запроса?
Например запрос:
SELECT * FROM table;
из результатов этого запроса, допустим, мне нужны только строки с 10-ой по 20-ую.
пробовал так: SELECT * FROM table WHERE rownum BETWEEN 10 and 20;
не работает, такая конструкция работает, только если нужно ограничить номер строки снизу (например, rownum<20).
Выборку по ключевым полям таблицы не рассматриваем.
Версия Oracle: 9.2.0.7.0
 
01.06.2007 13:36  
OlegON
По моему нарушена логика приложения. Зачем это нужно?
Первое же, что пришло в голову, но неоптимальное это:
Цитата:
select * from supermag.sssysinfo where rownum<5
minus
select * from supermag.sssysinfo where rownum<2
 
01.06.2007 13:44  
kadr
Цитата:
Сообщение от OlegON
По моему нарушена логика приложения. Зачем это нужно?
Первое же, что пришло в голову, но неоптимальное это:
присоединяюсь к предыдущему "оратору", вот мой варинат
Код:
SELECT * FROM (
SELECT ROWNUM AS rown, s.* FROM smspec s)
WHERE rown BETWEEN 10 AND 20
 
01.06.2007 13:46  
Mtirt
Угу. Всё это хорошо, только выборка будет разная при изменении сортировки данных.
Лучше строить отбор по ключевым полям, потом ограничивая выборку по количеству записей...
 
01.06.2007 14:00  
kadr
Изначально было
Код:
SELECT * FROM table;
от этого и пляшем.
Ведь
Цитата:
Выборку по ключевым полям таблицы не рассматриваем
 
01.06.2007 14:13  
Mtirt
Kadr, я не про условия задачи. Они понятны.
Я про то, что строить какие-либо приложения на таких запросах, может привести к серьезным негативным последствиям.
 
01.06.2007 14:34  
Pyatak
Дело в том, что программе нужно просмотреть ВСЕ записи некоторых таблиц, причем заранее не известно что это за таблицы и какие есть в них поля. Когда программе указывают таблицу, она строит запрос SELECT * FROM table; где вместо table подставляет нужное имя, выполняет его и начинает просматривать записи. Эта программа пишется на Delphi с использованием компонентов ADO. А в них, если выполняется такой запрос, то все его данные сразу начинают копироваться в локальную память, которой для некоторых таблиц просто не хватает, вот и хотелось запрос по частям обрабатывать. Может будут другие предложения? Просто мне до сих пор на более низком уровне БД программировать не приходилось.
 
01.06.2007 14:44  
Mtirt
По идее должно помочь вот это: к

Ну и еще предложение поискать более быстрые компоненты доступа к базе, чем ADO.
Например DOA или ODAС.
 
01.06.2007 15:21  
Pyatak
Ага, помогло, спасибо.
Я б перешел на что-нибудь другое, но мне приходится писать мало и быстро, в некоторых случаях для разового использования, так что нет смысла, ADO справляется (до сих пор покрайней мере :))
 
01.06.2007 20:55  
OlegON
Цитата:
Сообщение от Pyatak
...Эта программа пишется на Delphi с использованием компонентов ADO. А в них, если выполняется такой запрос, то все его данные сразу начинают копироваться в локальную память, которой для некоторых таблиц просто не хватает, вот и хотелось запрос по частям обрабатывать. Может будут другие предложения? Просто мне до сих пор на более низком уровне БД программировать не приходилось.
ADO - универсальный костыль. Если не хочешь получить гору геморроя и глюков - сверни на более правильные компоненты на базе OCI, например те, что упомянула MTirt, если бесплатные, то на том же torry.net валяется Atom. Все нормально работает, кое-где есть буфферизация. Если хочешь просмотреть гигантскую таблицу именно списком, то рекомендую залезть в Дельфи поглубже на тему virtual listbox, например. В 9ке Оракла есть реверс просмотра, можно его использовать.
Что касается ADO, то будет прекрасный момент, когда надо будет мало и быстро, но глючность ADO тебя подведет. Я тоже не много пишу, но поверь, универсальность ADO вовсе не придает скорости разработке. В компонентах же часто встречаются вкусности вроде того же построения списка баз.
 
 
Опции темы



Часовой пояс GMT +3, время: 23:24.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.