Вывод номеров строк с помощью SQL запроса
Мякотин Сергей <
wait@...>
2012-01-12 08:40:04 GMT
Сделал процедуру вывода номеров строк, и обнаружил
странное поведение
оптимизатора и сортировки
create procedure GET_ROW_NUM(
DUMMY blob = null) -- Нужно указавать в случае union all например, т.к.
оптимизатор выполняет запрос 1 раз
returns (
NUM integer)
as
begin
if (RDB$GET_CONTEXT('USER_TRANSACTION', 'LastSetNum') <>
current_timestamp)
then RDB$SET_CONTEXT('USER_TRANSACTION', 'RowNumber', null);
NUM = coalesce(RDB$GET_CONTEXT('USER_TRANSACTION', 'RowNumber'), 1);
RDB$SET_CONTEXT('USER_TRANSACTION', 'RowNumber', NUM + 1);
RDB$SET_CONTEXT('USER_TRANSACTION', 'LastSetNum', current_timestamp);
suspend;
end
надеюсь то, что current_timestamp не меняется в рамках одного
запроса не
изменится в следующих версиях, или как?
использование:
select
(select NUM from GET_ROW_NUM),
r.RDB$RELATION_NAME
from RDB$RELATIONS r
(Continue reading)