Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / удаление заданного кол-ва записей / 5 сообщений из 5, страница 1 из 1
14.03.2008, 16:46
    #35191704
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление заданного кол-ва записей
Господа,
посоветуйте как лучше разрешить такую проблему:

Есть большая таблица Т1 (бол 100 млн записей) и есть очень большая таблица Т2(бол1.5 млрд) записей.

Мне нужно удалить все записи старше заданного периода из таблиц Т1 и все зависимые записи из Т2.

Т.к. записей много, то удалять требуется пачками - скажем по 1000 записей за транзакцию.

Вопрос в следующем. Как можно ограничить максимальное число удаляемых записей? В таблице Т2 ключ составной и совсем не очевидно как его дробить.

Я знаю что в Sуbase есть что-то вроде delete top 100. Есть ли что-то подобное в DB2?

Заранее большое спасибо,
Андрей
...
Рейтинг: 0 / 0
14.03.2008, 16:53
    #35191731
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление заданного кол-ва записей
delete from (select....)
...
Рейтинг: 0 / 0
14.03.2008, 16:55
    #35191738
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление заданного кол-ва записей
Код: plaintext
1.
2.
3.
4.
5.
create table xxx like syscat.columns
insert into xxx select * from syscat.columns
select count(*) from xxx
delete from (select  1  from xxx fetch first  10  rows only)
select count(*) from xxx
...
Рейтинг: 0 / 0
14.03.2008, 18:28
    #35192027
mitek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление заданного кол-ва записей
KruТ.к. записей много, то удалять требуется пачками - скажем по 1000 записей за транзакцию.

Вопрос в следующем. Как можно ограничить максимальное число удаляемых записей? В таблице Т2 ключ составной и совсем не очевидно как его дробить.


как пример :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE purgeInventory(IN dt DATE)
BEGIN  DECLARE SQLCODE INTEGER;
loop: LOOP    
DELETE FROM (SELECT  1  FROM Inventory WHERE InvDate <= dt FETCH FIRST  1000  ROWS ONLY) AS D;
IF SQLCODE =  100  THEN LEAVE loop;  
END IF;
COMMIT;
END LOOP loop;
END

CALL purgeInventory(‘ 2003 - 10 - 01 ’)
...
Рейтинг: 0 / 0
14.03.2008, 19:33
    #35192119
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление заданного кол-ва записей
mitek KruТ.к. записей много, то удалять требуется пачками - скажем по 1000 записей за транзакцию.

Вопрос в следующем. Как можно ограничить максимальное число удаляемых записей? В таблице Т2 ключ составной и совсем не очевидно как его дробить.


как пример :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE purgeInventory(IN dt DATE)
BEGIN  DECLARE SQLCODE INTEGER;
loop: LOOP    
DELETE FROM (SELECT  1  FROM Inventory WHERE InvDate <= dt FETCH FIRST  1000  ROWS ONLY) AS D;
IF SQLCODE =  100  THEN LEAVE loop;  
END IF;
COMMIT;
END LOOP loop;
END

CALL purgeInventory(‘ 2003 - 10 - 01 ’)


Спасибо за готовое решение! То что доктор прописал :-)

PS: Всем огромное спасибо за отклик
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / удаление заданного кол-ва записей / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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