powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Видимостть версии записи в пределах стейтмента
22 сообщений из 22, страница 1 из 1
Видимостть версии записи в пределах стейтмента
    #39328462
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create table AAA (ID integer not null, NAME varchar(100) not null, SYSDT timestamp default current_timestamp not null);
alter table AAA add constraint PK_AAA primary key (ID);
insert into AAA (ID, NAME) values (1, 'test');
commit work;

SET TERM ^ ;
create or alter procedure AAA$ (ID type of column AAA.ID, NAME type of column AAA.NAME)
returns (OUT_ID type of column AAA.ID) as
begin
  OUT_ID = :ID;
  update AAA T
  set T.NAME = coalesce(:NAME, T.NAME),
      T.SYSDT = current_timestamp
  where T.ID = :OUT_ID;
  suspend;
end^
SET TERM ; ^



теперь, если выполнить:
Код: plsql
1.
2.
3.
select *
from AAA$(1, 'test1') P
left join AAA T on T.id=P.OUT_ID;


- получим старые значения, а не новые. Если же выполнять двумя последовательными запросами (всё, естестественно, в одной транзакции) - то всё ожидаемо.

Не бага ли это?
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328470
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,
во-первых сообщи версию FB. А во-вторых что за странная привычка менять таблицу в селективной ХП?
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328479
Симонов Денис,
Версия FB естестна текущая, 3.0.1.
Привычки - дело лично. Как и отношение к ним.
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328480
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый никНе бага ли это?
Фича это: стабильность курсора.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328483
Симонов Денис,
Обновился до рассвежайшего снепшот-билда 3.0.2.32617-0. На всякий. Всё тоже самое, без изменений.
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328485
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Серый-серый Ник!
You wrote on 17 октября 2016 г. 18:25:44:

Серый-серый Ник> Обновился до рассвежайшего снепшот-билда 3.0.2.32617-0. На всякий. Всё тоже самое, без изменений.
релизные ноты чти.
там есть и это.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328486
Dimitry Sibiryakov,
Не всё так просто, вот это работает:
Код: plsql
1.
2.
3.
select null, null,  null from AAA$(1, 'test100500') P
union all
select T.id, T.name, T.sysdt from AAA T where T.id=1;
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328489
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,

Проверь на 2.5. По идее стабильность курсора скорее всего влияет.

JOIN c ХП, которая меняет данные не надо делать никогда, ибо это может привести к непредсказуемым результатам, причём в любой версии. Исключением может быть только работа с GTT внутри ХП.
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328493
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,

ещё раз повторюсь не делай так никогда. Сейчас left join с помощью nested loop, потом мало ли оптимизатор подточат и он начнёт выполняться с помощью какого-нибудь hash join и весь твой результат накроется медным тазом. Нельзя в SELECT запросах закладываться на последовательность шагов оптимизатора
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328499
Симонов Денис,
на 2.5.6 всё работает ожидаемо. То есть работает :)
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328503
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,

ну значит со стабильностью курсора связано.

серый-серый никна 2.5.6 всё работает ожидаемо.

повторю нельзя такие ожидания строить, потому что работа оптимизатора может поменяться.
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328505
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый никНе всё так просто, вот это работает:
А вот это - баг. Пиши в трекер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328508
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

у него в ХП suspend есть, который разрывает сейвпойнт. В этом случае стабильность курсора может не работать и это задокументировано. А вот почему так сработало в первом запросе я не понимаю. Если заглянет Влад, тогда может быть и прояснится.
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328523
Симонов Денисещё раз повторюсь не делай так никогда. Сейчас left join с помощью nested loop, потом мало ли оптимизатор подточат и он начнёт выполняться с помощью какого-нибудь hash join и весь твой результат накроется медным тазом. Нельзя в SELECT запросах закладываться на последовательность шагов оптимизатора
Это всё понятно, но никуда даже к тому времени не денутся:
1. латентность сети
2. необходимость клиенту после изменения обновлять данные с сервера.
Сейчас думать как оно там будет в светлом будущем смысла не вижу. Но надеюсь будет и тогда возможность указать серверу порядок выполнения. Ну а не будет - в execute block придётся заворачивать.
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328531
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,

для приведенного примера вполне достаточно UPDATE ... RETURNING
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328569
Симонов Денис,
Совершенно верно. Только пример естественно упрощённый, и только для иллюстрации ситуации. Никто бы в здравом уме не стал городить такой огород для запроса типа update.
В нашей системе для каждой таблицы создаётся такая проца, которая только и может изменять саму таблицу. Для разграничения прав и уничтожения пользовательских триггеров как класса. Плюсы и минусы такого подхода - не предмет данного топика.
Вопрос же в другом - мы уже вляпались в светлое будущее (3.0 и выше), или таки баг и он поправим?
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328571
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,

начиная с 3.0 это ожидаемое поведение. Запрос возвращает содержимое таблицы на момент старта оператора.
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328577
Симонов Денис,
Ясно. Значит таки вляпались....
Тогда такой вопрос - вариант:
Код: plsql
1.
2.
select * from AAA T 
where T.id = (select P.OUT_ID from AAA$(1, 'test100500') P)


тоже отныне вне закона?
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328582
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,

этот вариант ещё более бредовый чем предыдущий. По идее он не должен работать как ты ожидаешь даже в 2.5.
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39328585
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
серый-серый ник,

ты конечно можешь найти способ затащить кота в бассейн, но лучше этого не делать.

Легальные способы RETURNING в том числе и на VIEW. ХП возвращающая добавленную/изменённую строку или даже набор строк, тоже самое с помощью EXECUTE BLOCK.

Пытаться изменить что либо с помомщью побочных эффектов селективных ХП не правильно.
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39329357
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денису него в ХП suspend есть, который разрывает сейвпойнт. В этом случае стабильность курсора может не работать и это задокументированоПохоже на то. Не проверял.

Симонов ДенисА вот почему так сработало в первом запросе я не понимаю.Я тоже не понимаю - что ты тут называешь "первым запросом" и что осталось не понятным ? :)
...
Рейтинг: 0 / 0
Видимостть версии записи в пределах стейтмента
    #39329363
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

я про 19791795
Здесь получили старые значения. Значит всё отработало как надо, несмотря на наличие suspend
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Видимостть версии записи в пределах стейтмента
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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