Re[2]: определить позицию строки в запросе
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 28.08.09 15:42
Оценка:
Здравствуйте, 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
WBR, Dmitry Beloshistov AKA [-=BDS=-]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.