powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / embedded sql - fetch relative
10 сообщений из 10, страница 1 из 1
embedded sql - fetch relative
    #33124931
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, товарищи программисты.
Объявляю в коде курсор, открываю его и хочу перескочить на 2045 строку в этом курсоре. В ISQL это можно сделать, написав FETCH RELATIVE 2045... . Power Builder 9.0.1.7275 ругается на это. Как быть?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DECLARE ic_up DYNAMIC CURSOR FOR SQLSAup;

ls_sqlselect = is_select + ls_whereup + is_order
PREPARE SQLSAup FROM :ls_sqlselect;
DESCRIBE SQLSAup INTO SQLDAup;
OPEN DYNAMIC ic_up USING DESCRIPTOR SQLDAup;
if SQLCA.sqlcode <>  0  then return

//!!! здесь компилятор не пропускает - ругается на RELATIVE
FETCH RELATIVE  2045  ic_up USING DESCRIPTOR SQLDAup;

CLOSE ic_up;

База: ASA 8.0.2.3601, подключение ч-з ODBC ASA Driver 8.0
...
Рейтинг: 0 / 0
embedded sql - fetch relative
    #33125191
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясню суть проблемы:
нужно организовать поиск в таблице по заданным критериям и в определенном порядке. Но при отображении выборки должны появиться не только найденные записи, но и записи, которые идут немного выше тех, что попали в условие одбора в том же порядке. Что-то типа мягкого поиска. Как можно это организовать?
Моя идея состояла в следующем: задается порядок и при этом открывается курсор ("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.
...
Рейтинг: 0 / 0
embedded sql - fetch relative
    #33125289
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя SQL запрос строится динамически,
так почему не отбирать сразу только данные которые нужны ?
если не нужны данные с 100 по 1000 пишется чтото такое:
...
AND (rownum < 100 or rownum > 1000)
...
Рейтинг: 0 / 0
embedded sql - fetch relative
    #33125405
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пользоваться безобразием в виде embedded sql вообще, и DYNAMIC CURSOR в частности...
...
Рейтинг: 0 / 0
embedded sql - fetch relative
    #33125494
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понял: что такое rownum?
...
Рейтинг: 0 / 0
embedded sql - fetch relative
    #33125498
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторнужно организовать поиск в таблице по заданным критериям
DECLARE ic_up DYNAMIC CURSOR FOR SQLSAup; дожили... =)
я бы предложил все делать в DW. такой вариант:
-сначала запрос по жесткому условию
-определяем значения сравниваемых полей первой записи результата запроса
-формируем новое условие запроса где значения полей меньше чем в первой записи, порядок выборки обратный и FIRST 100
-запрос данных с новым условием и добавлением записей (в retrievestart вернуть 2)
-сотрировка записей в DW

другой вариант все все сделать в ХП, хоть с курсором, хоть без.
...
Рейтинг: 0 / 0
embedded sql - fetch relative
    #33126419
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос к Филиппу: чем плох embedded sql?
...
Рейтинг: 0 / 0
embedded sql - fetch relative
    #33126506
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно поставить задачу - это наполовину ее решить. Попробуем...

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 и повторить алгоритм на клиенте, что значительно проще.
...
Рейтинг: 0 / 0
embedded sql - fetch relative
    #33127587
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИвановННВопрос к Филиппу: чем плох embedded sql?
Здесь это обсуждалось неоднократно.
...
Рейтинг: 0 / 0
embedded sql - fetch relative
    #33158068
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за долгое молчание - женидьба...
Спасибо за советы решил выкинуть к черту этот embeded sql - на самом деле с dw все приятнее и проще получается. Тема закрыта.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / embedded sql - fetch relative
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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