powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Непонятки с UPDATE и стандартом ANSI в ASA
3 сообщений из 3, страница 1 из 1
Непонятки с UPDATE и стандартом ANSI в ASA
    #32832776
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASA 8,9

Делаем таблицу
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE dba.tbl1(
  id integer not null default autoincrement,
  val1 integer null,
  val2 integer null,
  primary key (id)
)

заполняем данными

Код: plaintext
1.
insert into dba.tbl1(val1,val2) values ( 1 , 2 )

Если теперь выполнить запрос:
Код: plaintext
1.
2.
3.
update tbl1 set 
 val1=val2, 
 val2=val1;
то значения поменяются местами. И это правильно. Когда-то специально
лазил в стандарт, чтобы убедить интербейзовцев в кривости их апдейта.
Там четко сказано, что в адейте для присвоения используется старое значение, которое было до начала выполнения оператора.

Это атомарность оператора.

(для тех, кто не в курсе - в IB после такого оператора оба поля
заолнятся исходным значением val2)

Теперь немного усложним:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create variable @N integer;
set @N= 3 ;

update tbl1 set 
 @N= 4 ,
 val1=@N, 
 val2=val1;

DROP variable @N;

В результате этого запроса val2 получит, как и положено, старое значение val1.
А вот в val1 занесется НОВОЕ значение @N, т.е. 4, а не 3

Правильно ли это?

--
http://talk.ru/forum/talk.ru.accounting.development
...
Рейтинг: 0 / 0
Непонятки с UPDATE и стандартом ANSI в ASA
    #32832811
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В стандарте ANSI по моему ничего не сказано про использование переменных в UPDATE. С логической точки зрения это правильно, так как в MSSQL и ASA эта фича была специально разработана возможности недетерминированного использования переменных в UPDATE для организации нарастающих или промежуточных значений. Правда с вводом в 9-ую версию OLAP функций, позволяющих гораздо больше возможностей эта фича теперь не так актуальна для ASA.
...
Рейтинг: 0 / 0
Непонятки с UPDATE и стандартом ANSI в ASA
    #32832835
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSВ стандарте ANSI по моему ничего не сказано про использование переменных в UPDATE.


А там и не нужно говорить про переменные. Там указывается, что все значения
справа от знака "=" вычисляются до внесения каких-либо изменений самим оператором.

ASCRUS
С логической точки зрения это правильно, так как в MSSQL и ASA эта фича была специально разработана возможности недетерминированного использования переменных в UPDATE для организации нарастающих или промежуточных значений.

С практической может и правильно, а вот именно с логической - не очень, IMHO
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Непонятки с UPDATE и стандартом ANSI в ASA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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