powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / транзакции в хранимых процедурах
9 сообщений из 9, страница 1 из 1
транзакции в хранимых процедурах
    #33371877
poiuytr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть хранимая процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE PROCEDURE sp
 (IN idx INTEGER ) 
  SPECIFIC sp
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
  p1: begin

INSERT INTO t1 (id) VALUES (idx);
INSERT INTO t2 (id) VALUES (idx +  1 );

end p1;
Как в случае ошибки при инсерте во вторую таблицу (t2) отменить инсерт в первую?
...
Рейтинг: 0 / 0
транзакции в хранимых процедурах
    #33371914
nkulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A он у тебя и так отменится так как нет COMMIT между Insert.
...
Рейтинг: 0 / 0
транзакции в хранимых процедурах
    #33371922
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 poiuytr
Почитай про SAVEPOINT
...
Рейтинг: 0 / 0
транзакции в хранимых процедурах
    #33372085
poiuytr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nkulikovA он у тебя и так отменится так как нет COMMIT между Insert.Хм, моя практика показывает что не отменяется инсерт в первой таблице, потому и спросил. Может это автокоммит работает, как его отключить и явно управлять транзакциями?
А если написать процедуру так, будет ли разница?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE PROCEDURE sp
 (IN idx INTEGER ) 
  SPECIFIC sp
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
  p1: begin

DECLARE SQL_STRING VARCHAR( 9999 );

INSERT INTO t1 (id) VALUES (idx);
set SQL_STRING = 'INSERT INTO t2 (id) VALUES (' || CHAR(idx) || ' + 1);';
PREPARE S1 FROM SQL_STRING;
EXECUTE S1; 

end p1;

gardenmanПочитай про SAVEPOINTПочитаю
...
Рейтинг: 0 / 0
транзакции в хранимых процедурах
    #33372111
poiuytr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага! Мне помог begin atomic. И если скрипт выглядит так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE PROCEDURE sp
 (IN idx INTEGER ) 
  SPECIFIC sp
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
  p1: begin

DECLARE SQL_STRING VARCHAR( 9999 );

begin atomic

INSERT INTO t1 (id) VALUES (idx);

set SQL_STRING = 'INSERT INTO t2 (id) VALUES (' || CHAR(idx) || ' + 1);';
PREPARE S1 FROM SQL_STRING;
EXECUTE S1; 

end;

end p1;
то первый инсерт откатывается, если второй провалился.
...
Рейтинг: 0 / 0
транзакции в хранимых процедурах
    #33372669
adolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В талмуде Appl. Devel. guide классики жанра убедительно рекомендуют открывать транзакции в прикладухе - в их рамках выполнять ХП - по итогам выполнения этой самой ХП соответственно применять/откатывать uow.
...
Рейтинг: 0 / 0
транзакции в хранимых процедурах
    #33372932
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то вы путаете. Какой нафиг автокоммит?
Если вы тестируете свою процедуру из CLP, то прежде всего сделайте

update command options using c off
т.е. отключите автокоммит.

А из процедуры можно просто возвращать ошибку (было бы правильнее) да и ошибку-то можно в процедуре обрабатывать.
Хотя впрочем BEGIN ATOMIC хорошее решение...)) - для простого случая конечно.
...
Рейтинг: 0 / 0
транзакции в хранимых процедурах
    #33373622
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BEGIN ATOMIC в начале процедуры, вроде тогда процедура идет как одна транзакция.....
...
Рейтинг: 0 / 0
транзакции в хранимых процедурах
    #33374063
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TORTBEGIN ATOMIC в начале процедуры, вроде тогда процедура идет как одна транзакция.....
Уточню:
Не как одна транзакция, а как одна атамарная (составная) операция :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / транзакции в хранимых процедурах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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