|
|
|
embedded sql - fetch relative
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, товарищи программисты. Объявляю в коде курсор, открываю его и хочу перескочить на 2045 строку в этом курсоре. В ISQL это можно сделать, написав FETCH RELATIVE 2045... . Power Builder 9.0.1.7275 ругается на это. Как быть? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. База: ASA 8.0.2.3601, подключение ч-з ODBC ASA Driver 8.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 15:36 |
|
||
|
embedded sql - fetch relative
|
|||
|---|---|---|---|
|
#18+
Поясню суть проблемы: нужно организовать поиск в таблице по заданным критериям и в определенном порядке. Но при отображении выборки должны появиться не только найденные записи, но и записи, которые идут немного выше тех, что попали в условие одбора в том же порядке. Что-то типа мягкого поиска. Как можно это организовать? Моя идея состояла в следующем: задается порядок и при этом открывается курсор ("select * from tn order by c1, c2, c3, c4") на всю таблицу без условия отбора, затем при задании условия поиска (x1, x2, x3) выполняется что-то типа "select count(*) from tn where x1 ='02' and x2 = '34' and x3 < '89' order by c1, c2, c3, c4" и курсор сдвигается (fetch relative или absolut count(*) - 50) на count(*) - 50 и выводятся 100 строк делая простой fetch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:08 |
|
||
|
embedded sql - fetch relative
|
|||
|---|---|---|---|
|
#18+
У тебя SQL запрос строится динамически, так почему не отбирать сразу только данные которые нужны ? если не нужны данные с 100 по 1000 пишется чтото такое: ... AND (rownum < 100 or rownum > 1000) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 17:48 |
|
||
|
embedded sql - fetch relative
|
|||
|---|---|---|---|
|
#18+
Не пользоваться безобразием в виде embedded sql вообще, и DYNAMIC CURSOR в частности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 18:45 |
|
||
|
embedded sql - fetch relative
|
|||
|---|---|---|---|
|
#18+
Не совсем понял: что такое rownum? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 20:12 |
|
||
|
embedded sql - fetch relative
|
|||
|---|---|---|---|
|
#18+
авторнужно организовать поиск в таблице по заданным критериям DECLARE ic_up DYNAMIC CURSOR FOR SQLSAup; дожили... =) я бы предложил все делать в DW. такой вариант: -сначала запрос по жесткому условию -определяем значения сравниваемых полей первой записи результата запроса -формируем новое условие запроса где значения полей меньше чем в первой записи, порядок выборки обратный и FIRST 100 -запрос данных с новым условием и добавлением записей (в retrievestart вернуть 2) -сотрировка записей в DW другой вариант все все сделать в ХП, хоть с курсором, хоть без. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2005, 20:19 |
|
||
|
embedded sql - fetch relative
|
|||
|---|---|---|---|
|
#18+
Вопрос к Филиппу: чем плох embedded sql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2005, 12:15 |
|
||
|
embedded sql - fetch relative
|
|||
|---|---|---|---|
|
#18+
Правильно поставить задачу - это наполовину ее решить. Попробуем... 1) Выбрать часть записей из таблицы по условию 2) Выбрать 50 записей предшествующих первой из выбранных записей с учетом определенной сортировки 3) Выбрать 50 записей следующих за последней из выбранных записей с учетом определенной сортировки Вопрос в пункте 1 будет непрерывный диапазон записей (с учетом сортировки)? Иначе приведенный алгоритм должен быть изменен. Если следовать идеологии SQL то нельзя говорить о том что запись следует за другой. Соответственно решить эту задачу методами SQL нельзя, но можно использовать "нереляционные" методы, например 1) Перенумеровать все записи в порядке сортировки (через триггер при вставке или через временную таблицу при получении данных) 2) Найти запись с минимальным номером отвечающую условиям отбора 3) Уменьшить номер на 50 4) Найти запись с максимальным номером отвечающую условиям отбора 5) Увеличить номер на 50 6) Выбрать данные с условием WHERE internal_number >= @min_number AND internal_number <= @max_number ... или если объемы позволяют чтитать все данные в DS и повторить алгоритм на клиенте, что значительно проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2005, 12:58 |
|
||
|
embedded sql - fetch relative
|
|||
|---|---|---|---|
|
#18+
ИвановННВопрос к Филиппу: чем плох embedded sql? Здесь это обсуждалось неоднократно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2005, 18:35 |
|
||
|
|

start [/forum/topic.php?fid=15&fpage=83&tid=1338256]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 336ms |

| 0 / 0 |
