![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
COMMIT в ХП
3APA3A © (2004-07-08 14:29:00)Что то не получается...
Создаю в IB Console ХП
SET TERM!!;
CREATE PROCEDURE CREATE_CONF_COPY(NAME VARCHAR(32))
RETURNS
AS
BEGIN
INSERT INTO MYTABLE(STR) VALUES(:NAME);
COMMIT;
END!!
SET TERM;!!
IB Console мне говорит что Token unknown, line 6 char 3, то есть указывает как раз на первый символ COMMIT...
Как сделать, что бы данные в ХП добавлялись и сразу им COMMIT делался?
3APA3A (2004-07-08 15:22:00) [1]Я тут, пока спорили, почитал в других местах и немного осмыслил все это (как мне кажется =))...
Да ну не так уж и сложно это, но все равно... (горбатого могила исправит... =) )
Digitman (2004-07-08 15:17:00) [2]
> тут я понял почему в ХП нельзя COMMIT писать
уже радует
> если я делаю изменения в одной базе в двух табицах - в ХП
> сделал все эти изменения и все, либо COMMIT всего, либо
> ничего...
мне вот непонятно, это что, так сложно или нонсенс - управлять транзакцией на кл.стороне
старт_транзакции
try
.. вызов_ХП
подтверждение_транзакции
except
откат_транзакции
raise;
end;
??
3APA3A (2004-07-08 15:15:00) [3]Я не работал с Oracle и не знаю, что в его терминах значит "автономная транзакция"
Ну да... по крайней мере - мне хотелось бы видеть это именно так...
Desdechado (2004-07-08 15:10:00) [4]IB не поддерживает автономных (в терминах Оракла) транзакций. Имхо, это правильно.
А то ты попробуешь потом после коммита в процедуре еще какой-нить инсерт сделать... И это будет уже другая (незавершенная) транзакция?
3APA3A (2004-07-08 15:09:00) [5]не настолько уж это и простейший пример - модификация двух баз сразу... тут я понял почему в ХП нельзя COMMIT писать...
но, если я делаю изменения в одной базе в двух табицах - в ХП сделал все эти изменения и все, либо COMMIT всего, либо ничего...
Digitman (2004-07-08 15:04:00) [6]
> что он(сервер) сделает?
ничего он не сделает
он вернет статус ошибки клиенту
клиент же волен после этого изменить кондиции на нужные и повторно запустить ХП либо откатить транзакцию, ибо это его, клиента, прерогатива !
Digitman (2004-07-08 15:02:00) [7]
> 3APA3A (08.07.04 14:47) [4]
> Мне просто интересно, почему нет такой возможности в IB/FB...
> Ведь очень удобно, блин...
а ты представь себе простейшую, что клиент осуществляет согласованную модификацию двух баз одновременно , запустив в каждой свою транзакцию и стартуя последовательно ХП в каждой ...
ХП1 в базе 1 выполнилась успехно и подтвердила транзакцию
ХП2 в базе 2 вызвала искл.ситуацию и неподтвердила транзакцию
что делать клиенту ? он в шоке ! в базе 1 изменения уже подтверждены и их никак не откатить, хотя именно это именно сейчас и требуется - ведь изменения-то в базах должны быть согласованы !
подумай головой-то ...
3APA3A (2004-07-08 15:01:00) [8]А что он(сервер) сделает?
Johnmen (2004-07-08 14:57:00) [9]Нет.
3APA3A (2004-07-08 14:56:00) [10]Если в моем insert'е возникнет exception, сервер выйдет из ХП и автоматом вызовет ROLLBACK, правильно?
Соловьев (2004-07-08 14:49:00) [11]
> Ведь очень удобно, блин...
где удобно? у сервера что искуственный интелект чтобы он конфликты решил?
3APA3A (2004-07-08 14:47:00) [12]Да, и ложку самому держать... =)
Мне просто интересно, почему нет такой возможности в IB/FB... Ведь очень удобно, блин...
Johnmen (2004-07-08 14:42:00) [13]Ну ещё неудобно руль самому крутить...
:)))
3APA3A (2004-07-08 14:39:00) [14]То есть, мне на клиенте надо после вызова ХП делать COMMIT?
Как то неудобно получается...
Johnmen (2004-07-08 14:30:00) [15]Никак. Т.к. управление тр-ми прерогатива клиента.