Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere 16 - Änderungen und Upgrades » Upgrade auf SQL Anywhere 16 » Fehlerbehandlung: Datenbank-Upgrades

 

Fehlerbehandlung: Aggregatfunktionen und äußere Referenzen

SQL Anywhere befolgt die Standards von SQL/2008, um die Verwendung von Aggregatfunktionen zu regeln, wenn sie in einer Unterabfrage vorkommen. Diese Änderungen betreffen das Verhalten von Anweisungen, die für frühere Versionen der Software geschrieben wurden: Abfragen, die bisher gültig waren, können nun Fehlermeldungen erzeugen, und es kann sein, dass sich Ergebnismengen ändern.

Wenn eine Aggregatfunktion in einer Unterabfrage erscheint und die Spalte, die von der Aggregatfunktion referenziert wird, eine äußere Referenz darstellt, wird die gesamte Aggregatfunktion als äußere Referenz behandelt. Die Aggregatfunktion wird im äußeren Abfrageblock berechnet, nicht in der Unterabfrage, und wird dadurch zu einer Konstanten in der Unterabfrage.

Die folgenden Einschränkungen gelten für die Verwendung von Aggregatfunktionen mit äußerer Referenz in Unterabfragen:

  • Die Aggregatfunktion mit äußerer Referenz kann nur in Unterabfragen erscheinen, die sich in der SELECT-Liste oder der HAVING-Klausel befinden, und diese Klauseln müssen immer im unmittelbar anschließenden äußeren Block enthalten sein.

  • Aggregatfunktionen mit äußerer Referenz können nur eine äußere Spaltenreferenz enthalten.

  • Lokale Spaltenreferenzen und äußere Spaltenreferenzen können in derselben Aggregatfunktion nicht gemischt verwendet werden.

Einige Probleme, die in Verbindung mit diesen neuen Standard auftauchen, können vermieden werden , indem Sie die Aggregatfunktion neu formulieren und darin nur lokale Referenzen verwenden. Die Unterabfrage (SELECT MAX(S.y + R.y) FROM S) beispielsweise enthält sowohl eine lokale (S.y) als auch eine äußere (R.y) Spaltenreferenz, was nun nicht mehr zulässig ist. Sie kann als (SELECT MAX(S.y) + R.y FROM S) umgeschrieben werden. In der Neuprogrammierung hat die Aggregatfunktion nur eine lokale Spaltenreferenz. Die gleiche Art der Neuprogrammierung kann angewendet werden, wenn eine Aggregatfunktion mit äußerer Referenz nicht in einer SELECT- oder einer HAVING-Klausel auftritt.

 Beispiel 1
 Beispiel 2
 Siehe auch