Von "Multi-row Fetch" oder "Multi-row Insert" hatte ich bisher nichts gehört, bis mich David fragte mich heute morgen danach fragte. Ein APL2-Fan wünscht sich wohl, dass der AP127 diese DB2-Features nutzt. Recht hat er.
Seit der Version 8 bietet die Programmierschnittstelle der DB2 für z/OS die Möglichkeit, mit nur einem Fetch auf mehr als nur eine Zeile des Resultsets zuzugreifen. Eine sehr sinnvolle Erweiterung, die mit der Version 8.2 dann auch für andere DB2-Plattformen zur Verfügung gestellt wurde. Es liegt wohl nur an der Beschränkheit der Mainstream-Programmiersprachen, dass obwohl ein SQL-Select eine Menge von Tabellenzeilen als Ergebnis ergibt, aber auf Elemente dieser Menge nur einzeln zugegriffen werden kann - Zeile nach Zeile per Schleife.
Für APL mit seiner hervorragenden Fähigkeit, komplette Datenstrukturen verarbeiten zu können, stellt diese Einschränkung eher einen ärgerlichen Logikbruch dar. Nur gut, dass mit dem AP127 per Parameter für den Fetch mehrere Ergebniszeilen mit einer Anweisung zum APL2 übertragen werden können.
Auch andere APL-SQL-Schnittstellen bieten schon lange dem APL-Entwickler die Verarbeitung von Zeilenmengen, auch wenn dahinter die Mult-Row-Anweisungen in Single-Row-Anweisungen aufgelöst werden mussen. Als array-orientierte Programmiersprache eignet sich APL perfekt für die Arbeit mit releationalen Datenbanken.
Dem APL2-Anwender bringt also der multi-row Fetch oder der multi-row Insert keinen direkten Vorteil. Beide bringen aber nicht zu unterschätzende Performance-Verbesserungen. Gerade in verteilten Umgebungen können es nach Willie Favero 50%, in einzelnen Fällen gar mehr als 70% sein. Ein multi-row Insert kann gegenüber der Single-row-Variante eine 20%-ige Verbesserung bringen.
Warum sollte ausgerechnet APL2 diese Vorteile nicht nutzen können. Multi-row Fetch und multi-row Insert könnten doch gerade für APL2 implementiert worden sein.