Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / RDB$GET_CONTEXT и диалекты / 8 сообщений из 8, страница 1 из 1
22.08.2017, 21:53
    #39509049
AnyUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RDB$GET_CONTEXT и диалекты
FB 2.5.7.27050
в 1-м диалекте на запросе:
Код: plsql
1.
2.
3.
4.
5.
6.
select
  cast(coalesce(RDB$GET_CONTEXT('USER_TRANSACTION', 'AROW'), 0) as integer) + 1
  +
  cast(RDB$SET_CONTEXT('USER_TRANSACTION', 'AROW', cast(coalesce(RDB$GET_CONTEXT('USER_TRANSACTION', 'AROW'), 0) as integer) + 1) as integer)*0
  as ROWNUM
from TABLENAME T


на швабре будет написано:
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
numeric value is out of range.

если переписать так:
Код: plsql
1.
2.
3.
4.
5.
6.
select
  cast(cast(coalesce(RDB$GET_CONTEXT('USER_TRANSACTION', 'AROW'), 0) as double precision) + 1 as integer)
  +
  cast(RDB$SET_CONTEXT('USER_TRANSACTION', 'AROW', cast(coalesce(RDB$GET_CONTEXT('USER_TRANSACTION', 'AROW'), 0) as double precision) + 1) as integer)*0
  as ROWNUM
from TABLENAME T


то всё работает
PS: в третьем диалекте работает и первый вариант. С учётом каста к integer это баг или так и задумано?
...
Рейтинг: 0 / 0
06.09.2017, 11:38
    #39516290
AnyUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RDB$GET_CONTEXT и диалекты
Up
...
Рейтинг: 0 / 0
06.09.2017, 12:01
    #39516327
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RDB$GET_CONTEXT и диалекты
AnyUser,

переходи на 3.0. Там есть оконная функция ROW_NUMBER и не придётся использовать мутные плюшки для нумерации строк
...
Рейтинг: 0 / 0
06.09.2017, 12:09
    #39516343
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RDB$GET_CONTEXT и диалекты
AnyUserесли переписать такМинимизировать не получилось? А-то как-то не совсем очевидно, что именно не помещается.
...
Рейтинг: 0 / 0
06.09.2017, 14:47
    #39516503
AnyUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RDB$GET_CONTEXT и диалекты
Гаджимурадов Рустам,
Не совсем понял вопрос.
После первого выполнения
Код: plsql
1.
2.
3.
cast(coalesce(RDB$GET_CONTEXT('USER_TRANSACTION', 'AROW'), 0) as integer) + 1
  +
  cast(RDB$SET_CONTEXT('USER_TRANSACTION', 'AROW', cast(coalesce(RDB$GET_CONTEXT('USER_TRANSACTION', 'AROW'), 0) as integer) + 1) as integer)*0

в первом диалекте RDB$GET_CONTEXT('USER_TRANSACTION', 'AROW') возвратит '1.000000000'
Чего по логике быть не должно
...
Рейтинг: 0 / 0
06.09.2017, 15:02
    #39516523
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RDB$GET_CONTEXT и диалекты
Воспроизводится?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.09.2017, 16:13
    #39516586
AnyUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RDB$GET_CONTEXT и диалекты
Гаджимурадов Рустам,
Да, на последнем снепшоте 2.5 включительно и на месячной давности 3.0.3
...
Рейтинг: 0 / 0
07.09.2017, 07:17
    #39516885
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RDB$GET_CONTEXT и диалекты
В трекер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / RDB$GET_CONTEXT и диалекты / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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