Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно оформить транзакцию?


Bless ©   (2003-11-25 12:46:00) 

Как осуществить проверку в нижеприведенном коде, надо откатить или подтвердить транзакцию?

begin tran
insert into <table1>
insert into <table1>
insert into <table1>
if <все нормально (вставка прошла успешно во все 3 таблицы)>
then Commit tran
else Rollback tran


Reindeer Moss Eater   (2003-11-25 14:32:00) [1]

Но ведь вопрос в том, чтобы определить, КОГДА надо откатываться,а не КУДА.

Это надо решить самому, а не пробовать выяснить с помощью функций.

А как именно эта конструкция называется в MSSQL?

@@error


Bless   (2003-11-25 14:27:00) [2]

Reindeer Moss Eater © (25.11.03 13:02) [10]> А как именно эта конструкция называется в MSSQL?

ZrenBy © (25.11.03 13:07) [13]> Гм... В принципе подошло бы. Но ведь @@error - переменная глобальная и теоритически наверное возможна ситуация, когда после моего INSERT INTO... но до IF @@ERROR... какая-то процедура выполнит что-то и @@error будет указывать не на мою ошибку, а на ошибку этой процедуры? Или это исключено? Или ничего не остается, как проигнорировать такую ничтожно малую вероятность?

Digitman © (25.11.03 13:11) [14]>
В T-SQL тоже есть SAVE TRAN <savepoint_name>
Но ведь вопрос в том, чтобы определить, КОГДА надо откатываться,а не КУДА.


Digitman   (2003-11-25 13:11:00) [3]


> Bless


в MSSQL - не знаю

в FB PSQL, начиная с Alpha4, имеются конструкции

SAVEPOINT savepoint_name; (create savepoint)
ROLLBACK [WORK] TO [SAVEPOINT] savepoint_name; (rollback to


ZrenBy   (2003-11-25 13:07:00) [4]

begin tran
insert into <table1>
if(@@error != 0)goto Err

insert into <table1>
if(@@error != 0)goto Err

insert into <table1>
if(@@error != 0)goto Err

Commit
return(0)
Err:
if(@@trancount>0)rollback
return(-101)


Bless   (2003-11-25 13:05:00) [5]

sorry. MSSQL


Digitman   (2003-11-25 13:03:00) [6]


> Bless


SQL-сервер какой ?


Reindeer Moss Eater   (2003-11-25 13:02:00) [7]

А там try except есть


Reindeer Moss Eater   (2003-11-25 13:02:00) [8]

Просто по другому называтеся


Bless   (2003-11-25 13:01:00) [9]

Я не сказал, что это пишется внутри хранимой процедуры.
А там try...except нету


Danilka   (2003-11-25 12:58:00) [10]

[5] Reindeer Moss Eater © (25.11.03 12:57)
:))


Reindeer Moss Eater   (2003-11-25 12:58:00) [11]

мой псевдокод в смысле


Reindeer Moss Eater   (2003-11-25 12:57:00) [12]

так не надо думать, что мой не анализирует причину исключения.
он откатывает только тогда, когда надо


Danilka   (2003-11-25 12:55:00) [13]

[3] Reindeer Moss Eater © (25.11.03 12:52)
вызовет, но при этом не откатится.


Reindeer Moss Eater   (2003-11-25 12:52:00) [14]

А если вложенных транзакций нет поддержи, то begin tran вызовет исключение если есть активная транзакция


Digitman   (2003-11-25 12:49:00) [15]

begin tran
try
insert into <table1>
insert into <table1>
insert into <table1>
Commit tran
except
Rollback tran
raise;
end;


Reindeer Moss Eater   (2003-11-25 12:48:00) [16]

try
begin tran
insert into <table1>
insert into <table1>
insert into <table1>
Commit tran
except
Rollback tran
end


Наверх

Титульная страница Поиск, карта сайта Написать письмо