Использование курсоров... HELP!!!

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
Magik
Сообщения: 30
Зарегистрирован: 23 авг 2004, 10:17

Всем привет!
Мне надо сделать выборку(select) из нескольких таблиц. а потом вывести их в браузер(с помощью html) по 20 записей на страницу.
Т.е. допустим у меня есть 4 таблицы, я делаю выборку по нескольким полям. получаю,например, 50 записей. (получается 3 страницы).
Меня интересует какие есть варианты решения???
1. А) я создаю функцию, в ней создаю явный курсор, который делает мою выборку. получаю свои записей. Дальше я считаю сколько у меня записей в курсоре(кстати, это можно сделать или нет?)
Б) Потом я в этой же функции обащаюсь к курсору и с помощью функции FETCH вытаскиваю в цикле по одной записи. В количестве 20 записей. и потом вывожу их в браузер. вроде можно FETCH заменить на записи и таблицу(RECORD и TABLE)

Главное, мне интересно как оптимально и эффективно сделать выборку и как из этой выборки вытащить по 20 записей. (вывод в брузер не важен)

чтобы вытаскивать по 20 записей, можно при создании курсора ввести еще одно поле, в котором будет нумерация моих записей. а потом в цикле сделать что нить такое: ROWNUM поле <= 20...

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

2. вроде это можно сделать с помощью view. только как пока не знаю...

Счас хотя бы расскажите с помощью чего это делать(курсор или view)... и последовательность выполнения действий....
В общем, тут много "воды" и пока одни вопросы... но ГУРУ SQL... прошу, не бросайте в беде начинающих программеров... )))))))))))
ВСЕМ ответившим - СПАСИБО!!!
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

если делать с помощью курсоров, то тут вото что должно помочь:
системная переменная @@ROWCOUNT - количество записей в открытом курсоре
системная переменная @@CURSOR_ROWS - номер записи на которой стоит курсор (работает если курсор статический (static))
Magik
Сообщения: 30
Зарегистрирован: 23 авг 2004, 10:17

TO AndreykA:
а при использовании этих переменных я смогу выбрать именно те записи, которые мне надо.
Т.е. мне надо с 1 по 20 (1 страница); с 21 по 40 (вторая страница).... и так далее...
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

Курсор двигается по записям с помощью команды FETCH, так вот, к этой команде есть дополнения:
FETCH FIRST - самая первая запись
FETCH LAST - соответственно последняя
FETCH ABSOLUTE n - здесь задается номер записи на который должен стать курсор. если n положительный, то номер записи с начала множества, если отрицательный, то с конца.
с учетом всего этого мы можем пробегаться по нужному количеству записей с любой записи, то есть сначала по первым 20, затем по вторым 20 и т.д.
а вообще желательно задачу раскрыть поподробней: каким образом вызывается функция для получения запроса, какие в нее передаются параметры, что она возвращает (переменные или набор записей), тогда я может и скажу что то более конкретное
Magik
Сообщения: 30
Зарегистрирован: 23 авг 2004, 10:17

Спасибо!!!
Ответить