2016-08-29 3 views
1

Ich versuche, eine SQL-Anweisung zu erstellen Datensätze mit einer bestimmten Bedingung um 1000 zu löschen, alles, was ich versuche, funktioniert jedoch nicht. Zum Beispiel habe ich versucht,Batch löschen in HSQLDB und SQuirreL

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

aber DECLARE nicht in HSQLDB nicht. Bitte geben Sie mir einen Hinweis, wie dies über SQL erreicht werden kann, nicht von der Java-Seite aus.

Der Grund ist einfach, ich habe Heap-Fehler, wenn es versucht, 150k Datensätze zu löschen, so möchte ich die Löschung in kleinere Stücke aufteilen.

Antwort

1

As documented in the manual HyperSQL unterstützt die LIMIT Anweisung für DELETE

dies nur laufen Also, bis keine Zeilen mehr gelöscht werden:

DELETE FROM HISTORY 
WHERE HISTTYPE = 14 
LIMIT 1000; 

Sie in zu begehen oder laufen auto-commit Modus

nicht vergessen
+0

Nicht, was ich versuchte zu erreichen. Ich kenne 'LIMIT', ich könnte das Gleiche mit Rownum erreichen. Ich versuche, eine Schleife in HSQLDB zu bekommen, so dass ich diese eine Anweisung nicht 100 oder sogar 1000 Mal manuell ausführen muss. – codeCompiler77