Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Вложенные T-SQL транзакции / 6 сообщений из 6, страница 1 из 1
22.12.2005, 17:29
    #33452752
Mike Evteev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные T-SQL транзакции
Как мне видится общий подход должен бы приблизительно таким:

Для вложения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
begin
	declare @trancount int
	select @trancount = @@trancount
	if @trancount =  0 
                -- Мы владеем транзакцией, так что начнем...
		begin tran p1
        else
		-- Кто-то позвал нас из другой транзакции, присоединяемся...
		save tran p1
        
        -- Настоящая работа здесь
	
        -- Shit happend
	if @@error <>  0 
		goto handle_errors

        if @trancount =  0 
                ' Если сам себе хозяин, сохраняемся
		commit
        -- Говорим остальным что мы ОБ
        return
        
handle_errors:
        -- Откатываемся и сообщаем о своей беде
	rollback tran p1
	return @@error
end


Все бы ничего, но штука получается очень многословная и подверженная ошибкам. Одни имена транзакций чего стоят. Sybase, кстати, не рекомендует их использовать.

Так вот вопрос - можно ли все разрулить более элегантно?
...
Рейтинг: 0 / 0
22.12.2005, 18:06
    #33452866
Роман Дынник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные T-SQL транзакции
для mssql, но особо не отличается
шаблон для вложенных хп
...
Рейтинг: 0 / 0
22.12.2005, 19:00
    #33453001
Mike Evteev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные T-SQL транзакции
А вот там получается что имя транзакции или чекпойнта генерится из имени процедуры или как у меня вообще задано.
А если из внешней процедуры вложенную нужно позвать дважды? Имя ведь получится одно и тоже.
Поскольку коммит происходит только во внешней процедуре, то чекпойт сдвигается. Вроде конечно не так оно и страшно, потому что выполнение последовательное, но все же сайд эффект, что несколько волнует...
...
Рейтинг: 0 / 0
22.12.2005, 19:26
    #33453043
Zhora
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные T-SQL транзакции
И тут
...
Рейтинг: 0 / 0
23.12.2005, 09:54
    #33453595
Роман Дынник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные T-SQL транзакции
Mike EvteevА вот там получается что имя транзакции или чекпойнта генерится из имени процедуры или как у меня вообще задано.
А если из внешней процедуры вложенную нужно позвать дважды? Имя ведь получится одно и тоже.
Поскольку коммит происходит только во внешней процедуре, то чекпойт сдвигается. Вроде конечно не так оно и страшно, потому что выполнение последовательное, но все же сайд эффект, что несколько волнует...
тогда имя процедуры+какой-нибудь @@nestedlevel
...
Рейтинг: 0 / 0
23.12.2005, 10:47
    #33453763
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные T-SQL транзакции
В общем, идеологически -- нет, особо ничего не сделаешь. Действительно трудный, занудный и кропотливый труд по управлению транзакциями и проверке ошибок (напоминаю, что после КАЖДОГО оператора надо проверять ошибки и , если что, соотв. образом обрабатывать завершение транзакции).

Мы боролись с этим тем, что код обработки был стандартным и
генерировался автоматически (часть кода писалась не руками, а программно).

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


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