Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Вложенные транзакции: T-SQL в ASA8 / 6 сообщений из 6, страница 1 из 1
12.02.2007, 21:40
    #34325423
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции: T-SQL в ASA8
Читаю доку:
SQL Anywhere 8.0.2For transactions starting with a BEGIN TRANSACTION statement, @@trancount has a value of 1 in both Adaptive Server Anywhere and Adaptive Server Enterprise after the first BEGIN TRANSACTION statement. If a transaction is implicitly started with a different statement, and a BEGIN TRANSACTION statement is then executed, @@trancount has a value of 1 in Adaptive Server Anywhere , and a value of 2 in Adaptive Server Enterprise after the BEGIN TRANSACTION statement.
Провожу простой эксперимент на ASA 8.0.3.
1) Создаю процедуру на T-SQL:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create procedure Test
as
begin
  declare @transisopen integer
  
  select @TransIsOpen = (case when @@trancount >  0  then  1  else  0  end)
  if @TransIsOpen =  0  
    begin transaction tran_alert
  ...
end
2) Пишу простецкий скрипт по ее вызову, в котором перед вызовом процедуры выполняется insert:
Код: plaintext
1.
2.
create table #MyInfo (f1 integer)
insert into #MyInfo (f1) values ( 1 ) 
execute Test
3) Выполняю скрипт в I-SQL и смотрю процедуру на отладчике. При заходе в процедуру @@trancount=0, как и обещает дока. После выполнения begin transaction получаю @@trancount=2 !
Вопрос: Почему 2, а не 1?
...
Рейтинг: 0 / 0
13.02.2007, 09:16
    #34325867
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции: T-SQL в ASA8
Может перед execute, надо сделать commit
...
Рейтинг: 0 / 0
13.02.2007, 10:57
    #34326246
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции: T-SQL в ASA8
Sergey OrlovМожет перед execute, надо сделать commit
Да не в том дело. Оно понятно, что чудеса происходят из-за наличия insert'а перед вызовом процедуры, который неявно (implicitly) стартует транзакцию.
Если insert'а нет, но как и ожидалось, на входе в процедуру @@trancount=0, после begin transaction получаем @@trancount=1.

Если есть неявный старт транзакции, то на входе в процедуру получаем @@trancount=0, что соответствует доке:
SQL Anywhere StudioAdaptive Server Anywhere does not set the @@trancount value to 1 when a transaction is started implicitly. Consequently, the Adaptive Server Anywhere @@trancount variable has a value of zero before any BEGIN TRANSACTION statement (even though there is a current transaction)
но после begin transaction непонятным образом @@trancount подпрыгивает до двух, что доке не соответствует:
SQL Anywhere StudioIf a transaction is implicitly started with a different statement, and a BEGIN TRANSACTION statement is then executed, @@trancount has a value of 1 in Adaptive Server Anywhere

Что и где я не так понимаю?
...
Рейтинг: 0 / 0
13.02.2007, 17:22
    #34327932
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции: T-SQL в ASA8
Скорее всего, еще надо учитывать сам запуск процедуры.

---
http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
13.02.2007, 18:31
    #34328207
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции: T-SQL в ASA8
White OwlСкорее всего, еще надо учитывать сам запуск процедуры.
так ведь уже внутри процедуры, но до выполнения begin transaction имеем @@trancount=0.
...
Рейтинг: 0 / 0
13.02.2007, 19:43
    #34328411
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные транзакции: T-SQL в ASA8
Может case портит ? Попробуйте типа select @trancount = @@trancount
сразу, а затем case с локал @trancount. Да еще разные(?) переменные:
@transisopen vs. @TransIsOpen + отладчик уберите, попробуйте просто selectом печатать.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Вложенные транзакции: T-SQL в ASA8 / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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