powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Транзакция в процедуре
14 сообщений из 14, страница 1 из 1
Транзакция в процедуре
    #32654826
Luinil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, хочу в ХП стартовать транзакцию, провести несколько операторов апдейта, потом если хоть один завершился неудачей, откатить.

Возможно такое в процедуре? Как это в дельфи делать я знаю но хотелось бы сделать это здесь, а не тащить все на клиент, вернуть только Result процедуры 0 или 1.
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32654850
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у тебя FB 1.5 смотри в сторону Savepoints. В IB 7 тоже вроде есть, я за ним не слежу особо...
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32655061
Luinil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Лентяй

IB6.0

По видимому в ИБэйсе нет конструкции типа:

try
..
except
..
end;
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32655063
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нельзя. Никак. Вообще. Толко с клиента.
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32655068
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Luinil2Лентяй

IB6.0

По видимому в ИБэйсе нет конструкции типа:

try
..
except
..
end;

1. Ошибаешься.

2. Транзакции все равно запускаются на клиенте!
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32655076
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Luinil2Лентяй

IB6.0

По видимому в ИБэйсе нет конструкции типа:

try
..
except
..
end;

Ишши - должон быть.
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32655198
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LuinilПодскажите, хочу в ХП стартовать транзакцию, провести несколько операторов апдейта, потом если хоть один завершился неудачей, откатить.
Транзакции стартовать и откатывать не надо. Сервер все отменит за тебя. С учетом некоторых внутренних нюансов, ХП должна выглядеть примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 -- какой-то код 
BEGIN
  BEGIN
     -- тут несколько операторов апдейта 
  END
WHEN ANY THEN
  BEGIN
     -- пустой блок (no-op)    
  END
END
-- еще какой-то код
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32655382
Luinil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr LuinilПодскажите, хочу в ХП стартовать транзакцию, провести несколько операторов апдейта, потом если хоть один завершился неудачей, откатить.
Транзакции стартовать и откатывать не надо. Сервер все отменит за тебя. С учетом некоторых внутренних нюансов, ХП должна выглядеть примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 -- какой-то код 
BEGIN
  BEGIN
     -- тут несколько операторов апдейта 
  END
WHEN ANY THEN
  BEGIN
     -- пустой блок (no-op)    
  END
END
-- еще какой-то код


Хорошая идея. Примерно так я себе это и представлял. Попробую.
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32655408
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to dimitr: ему же откатить надо, а ты закатить предлагаешь ;)

LuinilПодскажите, хочу в ХП стартовать транзакцию, провести несколько операторов апдейта, потом если хоть один завершился неудачей, откатить.
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32656005
Luinil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По видимому, либо тема попалась интересная)...
Либо
e
Hаpодная пpимета:
Если пpогpаммист в pабочее вpемя игpает, значит - либо у него мало pаботы
и большая заpплата, либо у него много pаботы и маленькая заpплата.


...Я решил откат делать на клиенте. А собственно почему бы и нет. Какая нафиг разница.
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32656593
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 -- какой-то код 
BEGIN
  BEGIN
     -- тут несколько операторов апдейта 
  END
WHEN ANY THEN
  BEGIN
     -- пустой блок (no-op)    
  END
END
 -- еще какой-то код 
а что при таком коде произойдет автоматический commit? что то не понял я эту конструкцию
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32656683
Luinil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 -- какой-то код 
BEGIN
  BEGIN
     -- тут несколько операторов апдейта 
  END
WHEN ANY THEN
  BEGIN
     -- пустой блок (no-op)    
  END
END
 -- еще какой-то код 
а что при таком коде произойдет автоматический commit? что то не понял я эту конструкцию

Речь в основном шла о том чтобы отловить как-нибудь исключения, то есть сбои при выполнении апдейт-операторов, а уж потом потвердить или отменить - в клиенте - неважно как.
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32656763
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76а что при таком коде произойдет автоматический commit? что то не понял я эту конструкцию

Произойдет отмена всех действий в первом BEGIN..END блоке в случае ошибки в любом из них, не больше и не меньше. А коммитить потом или роллбечить - дело приложения.
...
Рейтинг: 0 / 0
Транзакция в процедуре
    #32656797
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Dimitr
Понятно, спасибо.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Транзакция в процедуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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