Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перемещение по записям в запросе

3.4K
09 февраля 2006 года
mag23
35 / / 04.07.2004
Существует выборка из множества строк,сделанная оператором SELECT.
1. Как мне переместиться к примеру на 12 строку?
2. Или как мне выбрать к примеру 7,20,41 строку?
2
09 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by mag23
Существует выборка из множества строк,сделанная оператором SELECT.
1. Как мне переместиться к примеру на 12 строку?
2. Или как мне выбрать к примеру 7,20,41 строку?


что значит переместится? выборка сделанная оператором SELECT в общем случае неупорядочена. так что 12 строка не всегда 12я.

3.4K
09 февраля 2006 года
mag23
35 / / 04.07.2004
Цитата:
Originally posted by squirL
что значит переместится? выборка сделанная оператором SELECT в общем случае неупорядочена. так что 12 строка не всегда 12я.


Допустим я отсортировал по дате при помощи ORDER BY, и мне требуется только 12-я строка(Первую или последнюю запись я найти смогу с помощью TOP(LIMIT)).

2
09 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by mag23
Допустим я отсортировал по дате при помощи ORDER BY, и мне требуется только 12-я строка(Первую или последнюю запись я найти смогу с помощью TOP(LIMIT)).


от СУБД зависит. это не ANSI SQL.

2.1K
09 февраля 2006 года
mainigor
151 / / 21.10.2005
Цитата:
Originally posted by mag23
Существует выборка из множества строк,сделанная оператором SELECT.
1. Как мне переместиться к примеру на 12 строку?
2. Или как мне выбрать к примеру 7,20,41 строку?



А кто является клиентом ?
Если программируешь на Borland то там это достаточно легко.
Выборку просмотрел, тыкнул в нужные записи и обработал их, также можно реализовать и в другом интерфейсе, например таблице сгенерированной в PHP. Отмеченные записи будут обработаны. А до возвращенного запроса никому не известно кто будет 12-м. Да и SQL сервер на то и SQL, чтоб сетевые запросы клиентов удовлетворять, так что пока вы запрос строите, другой клиент уже может три добавил.
Чтобы переместиться к записи в курсоре, опять же в чём (каком клиенте)?

3.4K
10 февраля 2006 года
mag23
35 / / 04.07.2004
Цитата:
Originally posted by mainigor
А кто является клиентом ?
Если программируешь на Borland то там это достаточно легко.
Выборку просмотрел, тыкнул в нужные записи и обработал их, также можно реализовать и в другом интерфейсе, например таблице сгенерированной в PHP. Отмеченные записи будут обработаны. А до возвращенного запроса никому не известно кто будет 12-м. Да и SQL сервер на то и SQL, чтоб сетевые запросы клиентов удовлетворять, так что пока вы запрос строите, другой клиент уже может три добавил.
Чтобы переместиться к записи в курсоре, опять же в чём (каком клиенте)?



Вообще-то я пишу на ODBC API, база Sybase7(урезанная)
вот кусок кода:
//****
strcpy(strSQL,"SELECT V FROM Table");
retcode=SQLExecDirect(hstmt1,(SQLCHAR*) strSQL,SQL_NTS);
nResult = SQLFetch(hstmt1);
nResult = SQLGetData(hstmt1, 1,SQL_DEFAULT ,&value,0, &nBytes );
printf(" %2f,%2f \r\n ",value,nBytes);
в переменную value заносится результат выборки(первая запись в выборке), а мне нужна 12-я сверху.Поля с порядковым номером у меня нет.

2
10 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by mag23
Вообще-то я пишу на ODBC API, база Sybase7(урезанная)
вот кусок кода:
//****
strcpy(strSQL,"SELECT V FROM Table");
retcode=SQLExecDirect(hstmt1,(SQLCHAR*) strSQL,SQL_NTS);
nResult = SQLFetch(hstmt1);
nResult = SQLGetData(hstmt1, 1,SQL_DEFAULT ,&value,0, &nBytes );
printf(" %2f,%2f \r\n ",value,nBytes);
в переменную value заносится результат выборки(первая запись в выборке), а мне нужна 12-я сверху.Поля с порядковым номером у меня нет.


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

3.4K
10 февраля 2006 года
mag23
35 / / 04.07.2004
Цитата:
Originally posted by squirL
хм... не вижу смысла в такой выборке. проще придумать условие по которому будет выбираться 12я строка. можете попробовать выбирать по уникальному полю строки (ключу), либо почитать доки на Sybase, возможно там есть служебное поле, наподобие Oracle rownum


В том-то и дело,что я не могу менять структуру базы. Должно быть что-то на подобие MOVE(12)....может я ошибаюсь

2
10 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by mag23
В том-то и дело,что я не могу менять структуру базы. Должно быть что-то на подобие MOVE(12)....может я ошибаюсь


а зачем менять? служебные поля и есть служебные поля. а таблиц без уникальных атрибутов не бывает. наличие уникального столбца (пусть даже неявного - обязательное требование к любой таблице реляционных СУБД.

3.4K
10 февраля 2006 года
mag23
35 / / 04.07.2004
Цитата:
Originally posted by squirL
а зачем менять? служебные поля и есть служебные поля. а таблиц без уникальных атрибутов не бывает. наличие уникального столбца (пусть даже неявного - обязательное требование к любой таблице реляционных СУБД.


Уникальное поле-это дата/время,но я к нему не могу привязаться

324
10 февраля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by mag23
В том-то и дело,что я не могу менять структуру базы. Должно быть что-то на подобие MOVE(12)....может я ошибаюсь



Не каждая база поддерживает Move, но скорее всего она будет поддерживать MoveNext, тогда сделав 12 раз MoveNext ты будешь на 12 строке.

3.4K
13 февраля 2006 года
mag23
35 / / 04.07.2004
Цитата:
Originally posted by AndreySar
Не каждая база поддерживает Move, но скорее всего она будет поддерживать MoveNext, тогда сделав 12 раз MoveNext ты будешь на 12 строке.


А как мне это сделать средствами SQL?

2
13 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by mag23
А как мне это сделать средствами SQL?


именно средствами ANSI SQL - ИМХО никак. только специфическими функциями или полями СУБД.

324
17 февраля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by squirL
именно средствами ANSI SQL - ИМХО никак. только специфическими функциями или полями СУБД.



Есть такой оператор REGNUM (или REG NUM), который нумерует выборку записей. затем с помощью WHERE можно будет обратится к нужной строке.

3.4K
17 февраля 2006 года
mag23
35 / / 04.07.2004
Цитата:
Originally posted by AndreySar
Есть такой оператор REGNUM (или REG NUM), который нумерует выборку записей. затем с помощью WHERE можно будет обратится к нужной строке.


Очень интересно.А можно пример?

2
17 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by AndreySar
Есть такой оператор REGNUM (или REG NUM), который нумерует выборку записей. затем с помощью WHERE можно будет обратится к нужной строке.


это ANSI? или все же специфическое от какой либо СУБД?

324
17 февраля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by squirL
это ANSI? или все же специфическое от какой либо СУБД?



так как это было достаточно давно, точно утверждать не могу, но он точно использовался в FoxPro

324
17 февраля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by mag23
Существует выборка из множества строк,сделанная оператором SELECT.
1. Как мне переместиться к примеру на 12 строку?
2. Или как мне выбрать к примеру 7,20,41 строку?



Для перемещения по записям результата запроса можно использовать курсор.

Для определения курсора:

 
Код:
DECLARE MyCursor CURSOR FOR
SELECT *
FROM Table


Это определение курсора не является исполняемым для запроса, он только определяет структуру будущего множества записей.
Для выполнения запроса и создания множества записей используй оператор OPEN.

 
Код:
OPEN MyCursor


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

 
Код:
FETCH MyCursor into @Field1, @Field2


В расширенном варианте оператор FETCH допустимо перемещаться сразу на заданную строку, при этом допустима как абсолютная, так и относительная адресация.

Оператор закрытия курсора имеет простой синтаксис и выглядит следующим образом:
 
Код:
CLOSE MyCursor
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог