powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Ещё о различиях 7->10
9 сообщений из 9, страница 1 из 1
Ещё о различиях 7->10
    #35085834
Leonid Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую. Ещё вот такая проблемка... Нижеприведённый фрагмент нормально работает на 7, но на 10 в последней строке выдаёт ошибку -958. Кто как считает, в которой версии баг, а которая работает правильно?

$EXECUTE IMMEDIATE "BEGIN WORK";
$EXECUTE IMMEDIATE "CREATE TEMP TABLE lvo ( i INT, f char( 16 ) ) WITH NO LOG";
$EXECUTE IMMEDIATE "INSERT INTO lvo VALUES ( 1, 'A' )";
$DECLARE sel CURSOR WITH HOLD FOR SELECT f INTO :f FROM lvo;
$OPEN sel;
$FETCH sel;
$EXECUTE IMMEDIATE "ROLLBACK";
$EXECUTE IMMEDIATE "BEGIN WORK";
$EXECUTE IMMEDIATE "CREATE TEMP TABLE lvo ( id INT ) WITH NO LOG";

P.S. Что-то такое я уже встречал на 9, но там create temp table проходил, а валилось на следующей команде - create index на эту таблицу - правда не помню точно с какой ошибкой, non-exclusive access, по-моему. Но зато хорошо помню, что проблему обещали устранить...
...
Рейтинг: 0 / 0
Ещё о различиях 7->10
    #35086118
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Считаю , что TEMP TABLE принадлежит сессии, а не транзакции.
...
Рейтинг: 0 / 0
Ещё о различиях 7->10
    #35086121
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid VorontsovПриветствую. Ещё вот такая проблемка... Нижеприведённый фрагмент нормально работает на 7, но на 10 в последней строке выдаёт ошибку -958. Кто как считает, в которой версии баг, а которая работает правильно?

$EXECUTE IMMEDIATE "BEGIN WORK";
$EXECUTE IMMEDIATE "CREATE TEMP TABLE lvo ( i INT, f char( 16 ) ) WITH NO LOG";
$EXECUTE IMMEDIATE "INSERT INTO lvo VALUES ( 1, 'A' )";
$DECLARE sel CURSOR WITH HOLD FOR SELECT f INTO :f FROM lvo;
$OPEN sel;
$FETCH sel;
$EXECUTE IMMEDIATE "ROLLBACK";
$EXECUTE IMMEDIATE "BEGIN WORK";
$EXECUTE IMMEDIATE "CREATE TEMP TABLE lvo ( id INT ) WITH NO LOG";

P.S. Что-то такое я уже встречал на 9, но там create temp table проходил, а валилось на следующей команде - create index на эту таблицу - правда не помню точно с какой ошибкой, non-exclusive access, по-моему. Но зато хорошо помню, что проблему обещали устранить...

а помоему ИМХО тут все соответствует описанию ошибки
finderr 958
This statement tries to create a table with the name that is shown, but a
temporary table with that name already exists. Only one temporary table with
a given name can exist in a session
.


Вы хотите чтобы таблица существовала на протяжении транзакции и по комиту (откату) удалялась?
Мне кажется так нельзя, во всяком случае я нигде в документации по Informix невидел описания временных таблиц живущих только на протяжении транзакции.
...
Рейтинг: 0 / 0
Ещё о различиях 7->10
    #35087484
Leonid Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> TEMP TABLE принадлежит сессии, а не транзакции
"Как прикажешь тебя понимать, Саид?" (c)

> Only one temporary table with a given name can exist in a session.
Ребята, там же rollback! Попробуйте сами открыть транзакцию, создать temp таблицу, а потом отрулить её – что получилось? Правильно! – Создание таблицы отрулилось. Попробуйте теперь сделать select или drop – получите SQL:-206, ISAM:-111. Не так?

> Вы хотите чтобы таблица существовала на протяжении транзакции и по комиту (откату)
> удалялась?
"М-м... Не угадываете." (c) Я хочу, чтобы по коммиту создание таблицы подтверждалось, а по откату – откатывалось. Только и всего. Более того, проблема проявляется только если курсор объявляется with hold. По-моему, это всё-таки баг...
...
Рейтинг: 0 / 0
Ещё о различиях 7->10
    #35087646
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагается перед ROLLBACK поставить CLOSE sel.
...
Рейтинг: 0 / 0
Ещё о различиях 7->10
    #35089389
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Vorontsov> Я хочу, чтобы по коммиту создание таблицы подтверждалось, а по откату – откатывалось. Только и всего. Более того, проблема проявляется только если курсор объявляется with hold. По-моему, это всё-таки баг...
А если временную таблицу сделать логируемой ? Может тогда она откатится полностью, вместе с созданием ?
...
Рейтинг: 0 / 0
Ещё о различиях 7->10
    #35091087
Фотография Daugava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно. Таблица не откатывается по причине "WITH NO LOG". Кстати, очень удобно для некоторых случаев. И именно так работало и на 7-ке. У меня есть один код, который еще с 7.24 версии работает. Создается темп табличка с WITH NO LOG, в которой ведется протокол работы. В случае любых проблем срабатывает ROLLBACK и протокол из временной таблички переносится в постоянный. Код пережил кучу апгрейдов сервера, сейчас работает на 10-ке.
...
Рейтинг: 0 / 0
Ещё о различиях 7->10
    #35091366
Leonid Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Предлагается перед ROLLBACK поставить CLOSE sel.
Да, так работает.

> А если временную таблицу сделать логируемой ?
Да, и так тоже работает. Именно поэтому я и утверждаю, что это баг. Господа, вы поймите меня правильно, проблема не в том, как обойти – как раз это я могу сделать и сам. Проблема в том, что вот уже около 10 лет эксплуатируется система, состоящая из порядка 600000 строк исходного кода, и чтобы найти и подправить все места где используется подобный приём, нужно либо просмотреть глазами все эти исходники, либо перетестировать всю функциональность...

> Таблица не откатывается по причине "WITH NO LOG".
"Вы всё неправильно понимаете." (c) Не откатываются изменения данных – тут я согласен, очень удобно для протоколирования (но таблица должна быть создана до транзакции). Но само создание таблицы должно откатиться! Что, в общем-то, и происходит – удалить таблицу нельзя, её нет. Но как-то не до конца, что-то у него там не очищается из-за hold курсора...
...
Рейтинг: 0 / 0
Ещё о различиях 7->10
    #35091641
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Vorontsov> Предлагается перед ROLLBACK поставить CLOSE sel.
Да, так работает....
Насколько я понимаю, так и надо было делать с самого начала, а не надеятся, что система во время отката все сделает сама и корректно.
Если это не сделали ранее, значит надо сделать теперь, при миграции.

Leonid VorontsovПроблема в том, что вот уже около 10 лет эксплуатируется система, состоящая из порядка 600000 строк исходного кода, и чтобы найти и подправить все места где используется подобный приём, нужно либо просмотреть глазами все эти исходники, либо перетестировать всю функциональность...
Именно "перетестировать всю функциональность" и не верить сказкам маркетологов, что переход сложной системы на более высокую версию будет мгновенным.
Нам везло (или системы писались достаточно корректно с использованием серверов приложений)
и переводы нескольких систем с 7.31 на 9.30 и одной с 9.30 на 10.0 происходили практически безболезненно, но проверять приходилось почти все. Во втором случае было откорректировано всего пару запросов.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Ещё о различиях 7->10
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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