Verwenden von SQL als verherrlichtes ISAM-Paket (Indexed Sequential Access Method). Insbesondere das Verschachteln von Cursorn anstelle der Kombination von SQL-Anweisungen zu einer einzigen, wenn auch größeren Anweisung. Dies gilt auch als "Missbrauch des Optimierers", da der Optimierer tatsächlich nicht viel tun kann. Dies kann mit nicht vorbereiteten Aussagen kombiniert werden, um maximale Ineffizienz zu erzielen:
DECLARE c1 CURSOR FOR SELECT Col1, Col2, Col3 FROM Table1
FOREACH c1 INTO a.col1, a.col2, a.col3
DECLARE c2 CURSOR FOR
SELECT Item1, Item2, Item3
FROM Table2
WHERE Table2.Item1 = a.col2
FOREACH c2 INTO b.item1, b.item2, b.item3
...process data from records a and b...
END FOREACH
END FOREACH
Die richtige Lösung besteht (fast immer) darin, die beiden SELECT-Anweisungen zu einer zu kombinieren:
DECLARE c1 CURSOR FOR
SELECT Col1, Col2, Col3, Item1, Item2, Item3
FROM Table1, Table2
WHERE Table2.Item1 = Table1.Col2
-- ORDER BY Table1.Col1, Table2.Item1
FOREACH c1 INTO a.col1, a.col2, a.col3, b.item1, b.item2, b.item3
...process data from records a and b...
END FOREACH
Der einzige Vorteil der Doppelschleifenversion besteht darin, dass Sie die Unterbrechungen zwischen den Werten in Tabelle 1 leicht erkennen können, da die innere Schleife endet. Dies kann ein Faktor in Kontrollunterbrechungsberichten sein.
Außerdem ist das Sortieren in der Anwendung normalerweise ein Nein-Nein.