powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Методы выборки из середины таблицы
5 сообщений из 5, страница 1 из 1
Методы выборки из середины таблицы
    #32006823
ThyNibelungenhord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа Ораклисты/Оракулисты
Такой вопрос: какие сужествуют методы выборки из таблицы какогото количества записей, находящихся в середине.

Допустим существуе таблица на 200 тысяч записей типа следующей:

ID STRING1 NUMBER1 NUMBER2 LSUPDATE
------- -------------------- --------- --------- ----------
1 aaa 10 20 01-06-2001
2 bbb 1 3 01-06-2001
18 ccc 5 91 10-10-2000
149 ddd 10 100 01-06-2001
200 eee 5 6 10-10-2000
400 fff 90 400 10-10-2000
500 ggg 4 67 10-10-1980
Всего 200.000 роус селектед

После определнного селекта (Q1) получает из нее допустим 5 тысяч. Вот этот селект:
select id,string1,
FSSTATISTICS_TORL_HITSHOSTS(number1,lsupdate) AS number_1,
FSSTATISTICS_TORL_HITSHOSTS(number2,lsupdate) AS number_2,
number2,TO_CHAR(lsupdate,'dd-mm-yyyy') as lsupdate
from table_x1
order by number_1 DESC, string1 ASC ;

ID STRING1 NUMBER_1 NUMBER_2 NUMBER2 LSUPDATE
------ -------------------- --------- --------- --------- ----------
1 aaa 10 20 20 01-06-2001
149 ddd 10 100 100 01-06-2001
2 bbb 1 3 3 01-06-2001
18 ccc 0 0 91 10-10-2000
200 eee 0 0 6 10-10-2000
400 fff 0 0 400 10-10-2000
500 ggg 0 0 67 10-10-1980
Всего 5.000 роус селектед

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

Пеперь нужно просматривать все эти записи допустим по 50.
И как же мне преобразовать запрос Q1 чтобы этот запрос розвратил мне например запись с 50 по 100. То есть это:

ID STRING1 NUMBER_1 NUMBER_2 NUMBER2 LSUPDATE
------ -------------------- --------- --------- --------- ----------
149 ddd 10 100 100 01-06-2001
2 bbb 1 3 3 01-06-2001
18 ccc 0 0 91 10-10-2000

Всего 50 роус селектед.

Если бы я сортировал по ID я бы спокойно обошелся псевдоколумом ROWNUM и выбирал бы любые N значений из любого места. Однако здесь ситуация другая.

Так как же решается моя проблема, или же она не решаема только с помощью передачи данных из первого запроса в другую таблицу и далее селектить из нее сколько нужно с нужного места. Да только проблема что много, записей могут не уместиться в РОЛЛБЭК СЕГМЕНТ, а если и уместяться, то копирование такое будет сравнительно небыстрым.

??????????????????
...
Рейтинг: 0 / 0
Методы выборки из середины таблицы
    #32006904
iperezh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно попробывать использовать хранимую процедуру, которая будет явно обрабатывть курсор и возвращать нужный набор записей. Хотя само понятие середины или начала таблицы звучит как то странно...
...
Рейтинг: 0 / 0
Методы выборки из середины таблицы
    #32006936
ThyNibelungenhord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечно, понятие середина таблицы не имеет право быть, потомучто это чушь полная. Однако другого слова я не нашел. Хотел сказать: представление таблицы после запроса, но после этого сразу бы возникли ассоцииации с VIEW, что знающих и мудрых ввело бы в большее заблуждение. В общем мне требуется сделать выборку из данных полученных после запроса, но не с помощью какого-то скрипта, а чтобы эту работу взяла на себя СУБД.
Вот например есть у меня таблица на 100.000 записей. Пишу я в SQL+: SELECT * from MY_BIG_TABLE. SQL плюс показывает мне их определенными порциями (в зависимости от параметра arraysize чтоли), причем явно не перебрасывает все записи по сети сразу, а постепенно подкачивает их с сервера. То есть выходит, либо СУБД кидает все 100.000 записей в буфер и отттуда выводит по N-цать (выделяя при этом память на 100.000 строк!!!), либо делает чтото вроде того SELECT * from MY_BIG_TABLE start_with 100 end_with 100+arraysize - то есть постоянно читает данные из таблиц руководствуясь пользовательским запросом. Ну в общем вам виднее господа. Я всего лишь только учусь.
...
Рейтинг: 0 / 0
Методы выборки из середины таблицы
    #32010954
Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, я хотел бы использовать выборку данных из огромной таблицы.
Какие есть приемы?
Пробовал через rownum - не получилось!
...
Рейтинг: 0 / 0
Методы выборки из середины таблицы
    #32010957
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а чем не устраивает
SELECT * FROM (SELECT T.*,ROWNUM RN FROM table T) WHERE RN BETWEEN нижняяграница AND верхняяграница
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Методы выборки из середины таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]