Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 удаление по частям в версии 7  [new]
use-se
Member

Откуда: Москва
Сообщений: 449
Добрый вечер, Коллеги.

подскажите, пожалуйста, аналог этому
delete from (select * from t1 fetch first 100 rows only)
для DB2 ver 7.2
Суть задачи в том, что бы разбить процедуру удаления данных из
большой таблицы на части, исключив возможные блокировки и
минимизировав нагрузку.

Спасибо.
14 янв 08, 17:02    [5150723]     Ответить | Цитировать Сообщить модератору
 Re: удаление по частям в версии 7  [new]
use-se
Member

Откуда: Москва
Сообщений: 449
запрос немного упрощен :-)
14 янв 08, 17:03    [5150733]     Ответить | Цитировать Сообщить модератору
 Re: удаление по частям в версии 7  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
Добрый вечер.
Нет под рукой v7.2, но должно работать:

CREATE PROCEDURE DELNREC(
  IN TBNAME VARCHAR(128)
, IN STMT VARCHAR(1024)
)
LANGUAGE SQL

BEGIN ATOMIC

 DECLARE I INT;
 DECLARE SQLCODE INT;
 DECLARE stmt_del VARCHAR(1024);
 DECLARE C1 CURSOR FOR S1;

 SET stmt = stmt || ' FOR UPDATE';
 PREPARE S1 FROM stmt;
 OPEN C1;
 SET stmt_del = 'DELETE FROM ' || rtrim(TBNAME) || ' WHERE CURRENT OF C1';
 PREPARE S2 FROM stmt_del;
 FETCH C1 INTO I;
 WHILE (SQLCODE!=100) DO
  EXECUTE S2;
  FETCH C1 INTO I;
 END WHILE;
 CLOSE C1;

END@

call DELNREC('t1', 'select 1 from t1 fetch first 100 rows only')@
14 янв 08, 18:05    [5151108]     Ответить | Цитировать Сообщить модератору
 Re: удаление по частям в версии 7  [new]
извращенец
Guest
alter table MyTable add column Counter_ integer;
create sequence s1 [start with.....] ;
update table MyTable set Counter_ = nextval for s1;
delete from MyTable where Counter_ < _threshold1_;
delete from MyTable where Counter_ < _threshold2_;
delete from MyTable where Counter_ < _threshold3_;
...
15 янв 08, 19:38    [5156990]     Ответить | Цитировать Сообщить модератору
 Re: удаление по частям в версии 7  [new]
use-se
Member

Откуда: Москва
Сообщений: 449
Mark Barinstein
Добрый вечер.
Нет под рукой v7.2, но должно работать:

CREATE PROCEDURE DELNREC(
.....

Марк,
большое Вам спасибо за интересную процедуру
к сожалению мне не удалось воспользоваться ей
вот что я получил при попытке создания
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL1109N  The specified DLL "db2udp" could not be loaded.  SQLSTATE=42724
пошарился в инете и нашел вот это
автор
This error occurs if the DB2 Application Development Tools and DB2 Application Development Client components are not selected.
The Db2udp is in the install component 'DB2 Application Development Tools(ADT)' which is in the product selection of 'DB2 Application Development Client'.

это если кому интересно чем продолжился разговор )))
ну на тестовую систему доставлю, а вот с продуктивом пока не знаю :(
16 янв 08, 17:12    [5161627]     Ответить | Цитировать Сообщить модератору
 Re: удаление по частям в версии 7  [new]
use-se
Member

Откуда: Москва
Сообщений: 449
извращенец
alter table MyTable add column Counter_ integer;
create sequence s1 [start with.....] ;
update table MyTable set Counter_ = nextval for s1;
delete from MyTable where Counter_ < _threshold1_;
delete from MyTable where Counter_ < _threshold2_;
delete from MyTable where Counter_ < _threshold3_;
...

Спасибо, но этот вариант не катит )
16 янв 08, 17:14    [5161643]     Ответить | Цитировать Сообщить модератору
 Re: удаление по частям в версии 7  [new]
mitek
Member

Откуда:
Сообщений: 605
автор
ну на тестовую систему доставлю, а вот с продуктивом пока не знаю :(

на тестовой системе GET_ROUTINE, на продуктиве PUT_ROUTINE.
подробности смотерть в доке по v7.2
17 янв 08, 10:49    [5164035]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить