Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SAVEPOINT в DB2 UDB v.7.2 (Windows 2000) / 9 сообщений из 9, страница 1 из 1
22.11.2004, 13:29
    #32793931
Road Runner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
Пишу следующий скрипт (запускаю в 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
22.11.2004, 13:35
    #32793964
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
Road RunnerВообще же проблема следующая:
в одной функции (функция1) на Си делается вставка некоторых данных в одну таблицу (таблица1).
в другой (функция2) - вызывается "функция1" и в другую таблицу (таблица2) вставляются некоторые, связанные с данными вставленными функцией "функция1" в таблицу "таблица1".
Суть в том, что если где-то происходит ошибка, то необходимо откатить изменения как таблицы 2, так и таблицы 1.


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

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

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

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

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
22.11.2004, 15:25
    #32794341
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
бррр.....

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
22.11.2004, 16:05
    #32794466
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
NewYearбррр..... автокоммит нужно убрать.
аха.. именно брррр...
автокоммит убирается:
db2 -c-
...
Рейтинг: 0 / 0
22.11.2004, 16:28
    #32794530
Road Runner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
Как можно выключить автокоммит из хранимой процедуры на С с embedded SQL?
...
Рейтинг: 0 / 0
22.11.2004, 17:12
    #32794691
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SAVEPOINT в DB2 UDB v.7.2 (Windows 2000)
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
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SAVEPOINT в DB2 UDB v.7.2 (Windows 2000) / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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