2016-08-29 3 views
1

특정 조건과 일치하는 레코드를 삭제하는 SQL 문을 만들려고합니다. 그러나 모든 시도는 작동하지 않습니다. 예를 들어 내가 HSQLDB에서 작동하지 않습니다HSQLDB 및 SQuirreL에서 일괄 삭제

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

하지만 DECLARE을 시도했습니다. 제발 누군가가 내게 SQL을 통해 얻을 수있는 방법에 대한 조언을주고, 자바 측면에서 그것을하고 싶지 않아요.

이유는 간단합니다. 150KB 레코드를 삭제하려고하면 힙 오류가 발생하므로 삭제를 작은 조각으로 분할하고 싶습니다.

답변

1

As documented in the manual HyperSQL는 대한 LIMIT 문을 지원 DELETE

행이 어떤 더 삭제되지 않을 때까지 그래서 그냥이를 실행

DELETE FROM HISTORY 
WHERE HISTTYPE = 14 
LIMIT 1000; 

커밋 또는 실행하는 것을 잊지 마세요 모드를

를 자동 위탁
+0

내가 성취 하려던 것이 아닙니다. 나는 'LIMIT'에 대해 알고 있는데, 나는 rownum으로 같은 것을 얻을 수 있었다. HSQLDB에 루프가 생기려고합니다. 그래서 한 문장을 수동으로 100 번 또는 1000 번 실행하지 않아도됩니다. – codeCompiler77