powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
9 сообщений из 9, страница 1 из 1
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
    #32793931
Road Runner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу следующий скрипт (запускаю в Quest Central или в родном CLP, но знаком для окончания статмента стоит точка с запятой):

savepoint ttt ON ROLLBACK RETAIN CURSORS;
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
rollback to savepoint ttt;

select * from dt.test1;

В результате хотелось бы получить неизмененную таблицу dt.test1. Пример составил вроде бы по доке, поэтому если будете к ней отсылать, то уточните, пожалуйста, на что именно нужно обратить внимание.

Вообще же проблема следующая:
в одной функции (функция1) на Си делается вставка некоторых данных в одну таблицу (таблица1).
в другой (функция2) - вызывается "функция1" и в другую таблицу (таблица2) вставляются некоторые, связанные с данными вставленными функцией "функция1" в таблицу "таблица1".
Суть в том, что если где-то происходит ошибка, то необходимо откатить изменения как таблицы 2, так и таблицы 1.

В MS SQL подобное решалось открытием именованной транзакции. Но попытки найти как похожее делать на DB2 - наткнулся, что DB2 не поддерживает вложенных транзакций (это правда?)

В общем - как можно решить проблему-то? Причем интересует решение как для Windows, так и для OS/390.
...
Рейтинг: 0 / 0
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
    #32793964
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Road RunnerВообще же проблема следующая:
в одной функции (функция1) на Си делается вставка некоторых данных в одну таблицу (таблица1).
в другой (функция2) - вызывается "функция1" и в другую таблицу (таблица2) вставляются некоторые, связанные с данными вставленными функцией "функция1" в таблицу "таблица1".
Суть в том, что если где-то происходит ошибка, то необходимо откатить изменения как таблицы 2, так и таблицы 1.


а где здесть проблема???
...
Рейтинг: 0 / 0
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
    #32793985
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не пойму, а при чем тут вложенные транзакции?
...
Рейтинг: 0 / 0
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
    #32794295
Road Runner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я наверно криво объяснил, сорри.

Попробую еще раз - необходимо начать транзакцию, потом вызывать разные процедуры, стэйтменты, потом ее, по определенным условиям, либо откатить, либо закоммитить. Проблема в том, что у меня этого не получается (см. пример в самом первом сообщении).

Про вложенные транзакции я спросил и просто так и потому что в MSSQL любой стайтмент выполняется в своей транзакции и если вручную открыть транзакцию, то остальные будут для нее вложенными (если, например, вызываемые процедуры тоже будут внутри себя открывать транзакции)... Вот... но вопрос про вложенные транзакции можно считать читым любопытством, что бы он не отвлекал.

Главное:
как можно добиться начала транзакции вручную и подтверждения\отката транзакции тоже вручную. Или как можно добиться такого поведения?
...
Рейтинг: 0 / 0
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
    #32794309
Road Runner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, вот этот скрипт должен работать:

savepoint ttt ON ROLLBACK RETAIN CURSORS;
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
rollback to savepoint ttt;

select * from dt.test1;

Я от него хотел, что бы он откатил состояние базы до insert into dt.test1 values (10);. Однако селект показывает, что вставка происходит и не откатывается.
...
Рейтинг: 0 / 0
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
    #32794341
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бррр.....

Road RunnerВообще, вот этот скрипт должен работать:

savepoint ttt ON ROLLBACK RETAIN CURSORS;
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
insert into dt.test1 values (10);
rollback to savepoint ttt;

select * from dt.test1;

Я от него хотел, что бы он откатил состояние базы до insert into dt.test1 values (10);. Однако селект показывает, что вставка происходит и не откатывается.


автокоммит нужно убрать.
...
Рейтинг: 0 / 0
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
    #32794466
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewYearбррр..... автокоммит нужно убрать.
аха.. именно брррр...
автокоммит убирается:
db2 -c-
...
Рейтинг: 0 / 0
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
    #32794530
Road Runner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можно выключить автокоммит из хранимой процедуры на С с embedded SQL?
...
Рейтинг: 0 / 0
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
    #32794691
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Road RunnerКак можно выключить автокоммит из хранимой процедуры на С с embedded SQL?

t.sql:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
connect to test2
@

drop table t1@
drop table t2@
drop procedure testproc()@

create table t1 (
	id	integer,
	name char( 30 )
)
@

create table t2 (
	id	integer,
	name char( 30 )
)
@


create procedure testproc() 
language sql
p1: begin
	insert into t1 (id,name) values ( 1 ,'1111');
	insert into t1 (id,name) values ( 2 ,'2222');
	insert into t1 (id,name) values ( 3 ,'3333');
	
	savepoint ttt ON ROLLBACK RETAIN CURSORS;

	insert into t2 (id,name) values ( 1 ,'1111');
	insert into t2 (id,name) values ( 2 ,'2222');
	insert into t2 (id,name) values ( 3 ,'3333');
	rollback to savepoint ttt;

	commit work;

end p1
@

call testproc()@

select * from t1@
select * from t2@


d:\sqllib\bin\db2clpex.exe db2 -z t.log -td@ -v -f t.sql

t.log:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
connect to test2

   Информация соединения с базой данных

 Сервер баз данных           = DB2/NT  8 . 2 . 0 
 ID авторизации SQL          = DB2ADMIN
 Алиас локальной базы данных = TEST2


drop table t1
DB20000I  Команда SQL выполнена успешно.

drop table t2
DB20000I  Команда SQL выполнена успешно.

drop procedure testproc()
DB20000I  Команда SQL выполнена успешно.

create table t1 ( id	integer, name char( 30 ) )
DB20000I  Команда SQL выполнена успешно.

create table t2 ( id	integer, name char( 30 ) )
DB20000I  Команда SQL выполнена успешно.

create procedure testproc() 
language sql
p1: begin
	insert into t1 (id,name) values ( 1 ,'1111');
	insert into t1 (id,name) values ( 2 ,'2222');
	insert into t1 (id,name) values ( 3 ,'3333');
	
	savepoint ttt ON ROLLBACK RETAIN CURSORS;

	insert into t2 (id,name) values ( 1 ,'1111');
	insert into t2 (id,name) values ( 2 ,'2222');
	insert into t2 (id,name) values ( 3 ,'3333');
	rollback to savepoint ttt;

	commit work;

end p1

DB20000I  Команда SQL выполнена успешно.

call testproc()

  Статус возврата =  0 


select * from t1

ID          NAME                          
----------- ------------------------------
           1   1111                           
           2   2222                           
           3   3333                           

   3  записей выбрано.


select * from t2

ID          NAME                          
----------- ------------------------------

   0  записей выбрано.



Ну и в чем проблема?
Ошибка явно в кривых руках....
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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