2016-08-29 2 views
1

Я пытаюсь создать оператор sql для удаления записей, которые соответствуют определенному условию на 1000, все, что я пытаюсь, однако, не работает. Например я попробовалПакетное удаление в HSQLDB и SQuirreL

DECLARE @count int 
SET @count = 1000 
    DELETE FROM HISTORY 
    WHERE HISTORYID IN (
     SELECT TOP (@count) HISTORYID 
     FROM HISTORY 
     WHERE HISTTYPE = 14 
    ) 

но DECLARE не работает в HSQLDB. Пожалуйста, дайте мне несколько советов о том, как это можно достичь с помощью SQL, не хотите делать это со стороны Java.

Причина проста, у меня есть ошибка кучи, когда она пытается удалить 150 тыс. Записей, поэтому я хочу разделить удаление на более мелкие части.

ответ

1

As documented in the manual HyperSQL поддерживает LIMIT заявление для DELETE

Так просто запустите это, пока строки не будут удалены больше:

DELETE FROM HISTORY 
WHERE HISTTYPE = 14 
LIMIT 1000; 

Не забудьте зафиксировать или работать в режиме автоматической фиксации

+0

Не то, чего я пытался достичь. Я знаю «LIMIT», я мог бы сделать то же самое с rownum. Я пытаюсь получить цикл, идущий в HSQLDB, поэтому мне не нужно запускать этот один оператор вручную 100 или даже 1000 раз. – codeCompiler77

Смежные вопросы