Absicherungen gegen Endlosschleifen


With recursive ist das einzige SQL-Konstrukt, das nicht zwangsläufig irgendwann fertig wird.0 Da das DBMS meist ein sehr wichtiges System ist, müssen Endlosschleifen dort immer vermieden werden. Daher bietet der SQL-Standard eine eigene Funktion dafür an: Die Cycle-Klausel. Bei manchen rekursiven Abfragen kann man Endlosschleifen mittels union [distinct] in der Rekursion unterbinden. Zu guter Letzt gibt es auch Systeme, die die Ausführungsanzahl des rekursiven Zweiges limitieren. Die meisten dieser Systeme bieten auch eine Möglichkeit an, dieses Limit anzupassen oder gar aufzuheben.

BigQuery 2026-02-02Db2 (LUW) 12.1.3dDuckDB 1.4.0H2 2.4.240MariaDB 12.1.2acMySQL 9.6.0cOracle DB 23.26.1bPostgreSQL 18SQL Server 2025cSQLite 3.51.0Cycle(… union [distinct] …)Limitiert, mit FehlerLimitiert, mit WarnungUnlimitiert, mit Warnung
  1. Verwende Cycle … Restrict • Keine Using … Sub-Klausel
  2. Keine Using … Sub-Klausel
  3. Konfigurierbar
  4. Falsch-positive Warnung möglich

Einstellung des Limits

Einige der Systeme, die die Ausführung bei Überschreitung eines Schwellwerts abbrechen, bieten eine Möglichkeit diesen Schwellwert zu ändern oder gar aufzuheben.

MariaDB 12.1.2MySQL 9.6.0SQL Server 2025aOPTION (maxrecursion …)SET max_recursive_iterations = …SET cte_max_recursion_depth = …/*+ SET_VAR(cte_max_recursion_depth = …) */
  1. Verwende 0, um das Limit vollständig aufzuheben

Die folgenden Beispiele zeigen die jeweilige Syntax, um das Limit auf den Maximalwert zu setzen. Die ersten beiden Varianten werden der jeweiligen SQL-Anweisung hinzugefügt.

WITH … ()
SELECT …
OPTION (maxrecursion 0)
WITH … ()
SELECT /*+ SET_VAR(cte_max_recursion_depth = 4294967295) */

Die nächsten ändern den Schwellwert für die aktuelle Session. Diese Einstellungen können auch Server-Weit (global) verwendet werden.

SET SESSION max_recursive_iterations = 4294967295
SET SESSION cte_max_recursion_depth = 4294967295

20 Jahre SQL-Evolution kann man nicht an einem Tag nachholen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS, um sukzessive aufzuholen und modern-sql.com am Radar zu behalten.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Fußnoten

  1. Etwas formeller: „Das einzige ISO/IEC 9075-2:2023-Konstrukt“. ISO/IEC 9075-4:2023 hat natürlich imperative Schleifen.

Neuigkeiten Abonnieren

Markus Winands MailinglistenMarkus Winands RSS-FeedMarkus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf TwitterMarkus Winand auf Bluesky
Copyright 2015-2026 Markus Winand. Alle Rechte vorbehalten.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO