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

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

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]

Никак. Т.к. управление тр-ми прерогатива клиента.


Наверх

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