![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно оформить транзакцию?
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