Форум: "Базы";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
ВнизКак правильно оформить транзакцию? Найти похожие ветки
← →
Bless (2003-11-25 12:46) [0]Как осуществить проверку в нижеприведенном коде, надо откатить или подтвердить транзакцию?
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 12:48) [1]try
begin tran
insert into <table1>
insert into <table1>
insert into <table1>
Commit tran
except
Rollback tran
end
← →
Digitman (2003-11-25 12:49) [2]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:52) [3]А если вложенных транзакций нет поддержи, то begin tran вызовет исключение если есть активная транзакция
← →
Danilka (2003-11-25 12:55) [4][3] Reindeer Moss Eater © (25.11.03 12:52)
вызовет, но при этом не откатится.
← →
Reindeer Moss Eater (2003-11-25 12:57) [5]так не надо думать, что мой не анализирует причину исключения.
он откатывает только тогда, когда надо
← →
Danilka (2003-11-25 12:58) [6][5] Reindeer Moss Eater © (25.11.03 12:57)
:))
← →
Reindeer Moss Eater (2003-11-25 12:58) [7]мой псевдокод в смысле
← →
Bless (2003-11-25 13:01) [8]Я не сказал, что это пишется внутри хранимой процедуры.
А там try...except нету
← →
Reindeer Moss Eater (2003-11-25 13:02) [9]А там try except есть
← →
Reindeer Moss Eater (2003-11-25 13:02) [10]Просто по другому называтеся
← →
Digitman (2003-11-25 13:03) [11]
> Bless
SQL-сервер какой ?
← →
Bless (2003-11-25 13:05) [12]sorry. MSSQL
← →
ZrenBy (2003-11-25 13:07) [13]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)
← →
Digitman (2003-11-25 13:11) [14]
> Bless
в MSSQL - не знаю
в FB PSQL, начиная с Alpha4, имеются конструкции
SAVEPOINT savepoint_name; (create savepoint)
ROLLBACK [WORK] TO [SAVEPOINT] savepoint_name; (rollback to
← →
Bless (2003-11-25 14:27) [15]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>
Но ведь вопрос в том, чтобы определить, КОГДА надо откатываться,а не КУДА.
← →
Reindeer Moss Eater (2003-11-25 14:32) [16]Но ведь вопрос в том, чтобы определить, КОГДА надо откатываться,а не КУДА.
Это надо решить самому, а не пробовать выяснить с помощью функций.
А как именно эта конструкция называется в MSSQL?
@@error
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c