Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как в ХП понять, что в SQL-запросе "пришла" последняя запись? / 23 сообщений из 23, страница 1 из 1
23.08.2018, 20:04
    #39692619
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
Например, в конструкции
Код: sql
1.
2.
3.
4.
for select ........ do 
begin
......
end



в запросе выдаются, предположим, 20 записей, как понять, что пришла последняя двадцатая запись?

Можно конечно предварительно выполнить запрос на количество записей, включить счётчик в цикле и когда счётчик сравняется с количеством записей определить, что пришла последняя запись. Но это как-то не очень красиво.
...
Рейтинг: 0 / 0
23.08.2018, 20:09
    #39692623
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11,

а зачем?
...
Рейтинг: 0 / 0
23.08.2018, 20:28
    #39692630
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
Симонов Денис,

Например, в ХП формируется список фамилий, каждая фамилия отделяется запятой, после последней фамилии запятая не должна стоять, а должна быть фраза "Расчёт закончен". Можно конечно в итоговой строке после цикла убрать последний символ и к концу добавить нужную фразу, но интересует альтернативная возможность решения.
(Прошу не воспринимать этот пример как реальную мою задачу)
...
Рейтинг: 0 / 0
23.08.2018, 20:33
    #39692635
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11,

можно задачу инвертировать. Т.е. добавлять запятую перед фамилией. И не добавлять запятую пока строка пустая
...
Рейтинг: 0 / 0
23.08.2018, 20:47
    #39692644
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
Симонов Денисzeon11,

можно задачу инвертировать. Т.е. добавлять запятую перед фамилией. И не добавлять запятую пока строка пустая

Да, можно конечно, спасибо за совет. Просто в ХП иногда требуется последнюю строку "Провернуть в фарш".
...
Рейтинг: 0 / 0
23.08.2018, 22:53
    #39692692
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11как понять, что пришла последняя двадцатая запись?
никак. потому что записей может быть 10, 20, 30 или 3.
Если используется for select в блоке или процедуре, то там всё и так понятно, потому что после блока записи уже выбраны.
...
Рейтинг: 0 / 0
24.08.2018, 08:20
    #39692778
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
Например, в конструкции просто добавить еще один блок выдачи
Код: sql
1.
2.
3.
4.
5.
6.
7.
for select ........ do 
begin
......
  suspend;
end
......
suspend;
...
Рейтинг: 0 / 0
24.08.2018, 08:46
    #39692785
Евгений, Екатеринбург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11Да, можно конечно, спасибо за совет. Просто в ХП иногда требуется последнюю строку "Провернуть в фарш".
Отсортируйте выборку в обратном направлении и "проверните в фарш" первую строку. Правда задача, при которой именно одну последнюю строку надо "проворачивать" мне сходу на ум не приходит.
...
Рейтинг: 0 / 0
24.08.2018, 08:51
    #39692787
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11,

вот тебе вариант для извращенцев

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
FOR SELECT
  ...
  COUNT(*) OVER() AS CNT,
  ROW_NUMNER(ORDER BY ...) AS RN
  FROM ...
  ORDER BY ...
  INTO
    ...
    CNT,
    RN
DO 
BEGIN
  ...
  IF (CNT = RN) THEN ... -- Последняя строка
END
...
Рейтинг: 0 / 0
24.08.2018, 11:28
    #39692895
crazypiggy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11,
Может попробовать вместо for select использовать declare cursor for. И там можно через row_count получить полседнюю запись
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
open my_cursor
while 1=1
fetch my_cursor into :column1, :column2 ....;
if row_count=0 then 
begin
 ....
 leave;
end
close my_cursor;
...
Рейтинг: 0 / 0
24.08.2018, 11:58
    #39692906
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
+1 к варианту I_P
...
Рейтинг: 0 / 0
24.08.2018, 12:25
    #39692917
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
+2 к варианту I_P .
Зачем городить непонятно что?
...
Рейтинг: 0 / 0
24.08.2018, 12:29
    #39692923
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
хм... с чего вы взяли что у ТС вообще есть suspend внутри for select?
...
Рейтинг: 0 / 0
24.08.2018, 12:53
    #39692944
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
не имеет ни малейшего значения
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.08.2018, 12:58
    #39692949
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11Например, в ХП формируется список фамилий, каждая фамилия отделяется запятой, после последней фамилии запятая не должна стоять".

вот именно это легко можно сделать с помощью LIST
...
Рейтинг: 0 / 0
24.08.2018, 14:16
    #39692996
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
Симонов Денис,

zeon11(Прошу не воспринимать этот пример как реальную мою задачу)
...
Рейтинг: 0 / 0
24.08.2018, 14:47
    #39693018
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
Симонов Денисхм... с чего вы взяли что у ТС вообще есть suspend внутри for select?
>Просто в ХП иногда требуется последнюю строку "Провернуть в фарш".
...
Рейтинг: 0 / 0
24.08.2018, 19:21
    #39693130
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
Как пример, для чего это нужно.

Транзакции ведь есть не только в информационных технологиях.
Любой технологический процесс состоит из последовательных действий, которые если формализованы, то отражаются в технологических картах, и тогда выявить нарушение технологического процесса легко сравнением двух таблиц - таблицы технологической карты и карты реального проведённого процесса.
Если-же процесс не формализован, то как таковой тех.карты не существует, а есть таблица реального проведённого процесса, и понять
завершился-ли он (технологический процесс) можно только анализом последней записи.
Под технологическим процессом можно понимать и приготовление борща, и лечение пациента, и, как я приводил пример солдатского строевого расчёта - последний солдат обязан сказать "Расчёт окончен".

Спасибо всем, накидали идей, буду думать как и что куда "прикрутить"
...
Рейтинг: 0 / 0
24.08.2018, 21:11
    #39693155
Котовасия
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11...
и понять
завершился-ли он (технологический процесс) можно только анализом последней записи.
...

Процесс циклического чтения гарантированно завершён после выхода из цикла. Ну, ежели сильно надо, добавь ещё проверку - "а начинался ли он вообще".
...
Рейтинг: 0 / 0
24.08.2018, 21:25
    #39693160
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11можно только анализом последней записи.
Код: sql
1.
select first 1 id_some_filed from tbl_teh_proc order by teh_proc_sort_field desc


Далее хоть обанализируйся полученным ИД последней записи техпроцесса.

Сдается мне автор пытается совершить прыжок в ширину на совершенно ровном месте, где можно тупо пройти строем.
...
Рейтинг: 0 / 0
24.08.2018, 22:36
    #39693168
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11последний солдат обязан сказать "Расчёт окончен".
на выборку последней записи в датасете сервер всегда сообщает EOF, что больше записей нет.
...
Рейтинг: 0 / 0
30.08.2018, 16:47
    #39695699
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
zeon11Можно конечно предварительно выполнить запрос на количество записей, включить счётчик в цикле и когда счётчик сравняется с количеством записей определить, что пришла последняя запись.

и обломаться, потому что за время между концом первого запроса и концом цикла кто-то вставил еще 2-3 записи, которые ты решил проигнорировать прервав досрочно цикл по счётчику

или наоборот, удалил
...
Рейтинг: 0 / 0
03.09.2018, 14:43
    #39697218
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в ХП понять, что в SQL-запросе "пришла" последняя запись?
Ariochи обломаться, потому что за время между концом первого запроса и концом цикла кто-то вставил еще 2-3 записи, которые ты решил проигнорировать прервав досрочно цикл по счётчику

или наоборот, удалил
Разве что транзакция снапшот
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как в ХП понять, что в SQL-запросе "пришла" последняя запись? / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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