Здравствуйте, KRA, Вы писали:
ov>>а как быть с более простыми базами, есть идеи?
KRA>Есть идея, как можно в firebird попытаться проэмулировать rownum. Можно попытаться использовать для этого последовательности, приблизительно так
Поправки для FB.
KRA>create sequence temp_seq;
CREATE GENERATOR TEMP_GEN;
SET GENERATOR TEMP_GEN TO 0;
COMMIT;
KRA>select gen_id(temp_seq,1) rownum from ....
Угу.
KRA>Тут правда возникают другие проблемы, которые нужно ещё подумать как решить
KRA>1. недопущение использования одной последовательности в паралельных запросах
Генераторы в FB работают вне контекста транзакций, поэтому при параллельной работе придется делать по генератору на каждый запрос. Потом — удалять. Т.к. пользователь будет владельцем обьекта — все должно пройти нормально (не будет накладок с правами).
KRA>2. превышение максимального значения в последовательности (я не уверен, как оно устроено в firebird. вероятно, начнётся опять с нуля(?))
В FB 2.x генераторы — INT64. Должно хватить по уши. Насчет установки начального значения — смотри выше.
P.S. Более универсальное решение для FB — ххранимая процедура:
I=0;
for SELECT ... FROM ... WHERE ...
INTO ....
do BEGIN
I=I+1;
SUSPEND;
END