PDA

View Full Version : DB2 Limit



h-net
01-11-07, 21:57
Hallo,

vor einiger zeit habe ich schonmal ein Thema dazu erstellt: http://www.newsolutions.de/forum-systemi-as400-i5-iseries/system-i-hauptforum/12449-db2-limit.html

Nun habe ich auf V5R4 geupdatet. ROW_NUMBER() müsste also eigentlich funktionieren...
das ist mein SQL-Befehl:
WITH x as (SELECT "TABELLE".*, ROW_NUMBER() Over (Order By "SPALTE") as Zeilennummer From "TABELLE") SELECT * FROM x

Als meldung bekomme ich da aber
Funktion nicht für die Abfrage unterstützt.

was mache ich da falsch?

gruß

B.Hauser
02-11-07, 05:59
Hallo,

vermutlich muss das SQL-Statement von der CQE (classic query engine) ausgeführt werden.
Die OLAP-Ranking Funktionen können nur von der SQE (SQL Query Engine) ausgeführt werden.

Versuche Deine Abfrage ohne die RowNumber() über den iSeries Navigator (Eine SQL Prozedur ausführen) auszufüheren und mit Visual Explain analysieren.

Im Visual Explain siehst Du rechts unten, welche Query Engine die Abfrage ausführt und falls es die CQE ist, auch warum die SQE nicht verwendet werden konnte.

Versuche die Ursache zu beheben und die gleiche Abfrage mit der SQE ausführen.

Außerdem ist Dein Befehl (oben) nicht komplett. Es fehlt das endgültige Select-Statement (aber vielleicht ist das nur ein Kopierfehler);


Birgitta

h-net
04-11-07, 19:44
hallo,

ich habe genau das gemacht was du gesagt hast... jedoch habe ich nicht rausfinden können ob der Befehl mit der CQE ider SQE ausgeführt wurde.

wenn ich "VisualExplain->Ausführen und Erklären" kommt folgende fehlermeldung:
SQL-Status: 42999
Vendorencode: -255
Nachricht: [SQL0255] Funktion nicht für die Abfrage unterstützt. Ursache . . . .
: Der Ursachencode ist 6:
-- Code 1 -- Skalare Unterauswahl und laterale Korrelation aus einem verschachtelten Tabellenausdruck sind für verteilte Dateien nicht zulässig.
-- Code 2 -- Beim Verwenden einer temporären verteilten Datei ist ein Fehler aufgetreten.
-- Code 3 -- EXCEPT oder INTERSECT wird für diese Abfrage nicht unterstützt.
-- Code 4 -- Ein Sequenzverweis wird bei verteilten Dateien nicht unterstützt.
-- Code 5 -- Ein rekursiver allgemeiner Tabellenausdruck wird für diese Abfrage nicht unterstützt.
-- Code 6 -- Eine OLAP-Funktion wird für diese Abfrage nicht unterstützt.
-- Code 7 -- ORDER OF wird für diese Abfrage nicht unterstützt.
-- Code 8 -- Skalare Gesamtauswahl wird für diese Abfrage nicht unterstützt.
-- Code 9 -- Eine verteilte Datei wird in einem multithread-fähigen Job verarbeitet, oder dies ist nicht der anfängliche Thread. Fehlerbeseitigung: Eine Liste der Maßnahmen zur Fehlerbeseitigung folgt:
-- Bei Code 1 die Abfrage so ändern, dass sie weder skalare Unterauswahl noch Korrelation aus einem verschachtelten Tabellenausdruck verwendet.
-- Bei Code 2 die vorherigen Nachrichten auf weitere Informationen prüfen.
-- Bei Code 3 EXCEPT oder INTERSECT aus der Abfrage entfernen.
-- Bei Code 4 den Sequenzverweis aus der Abfrage entfernen.
-- Bei Code 5 den rekursiven allgemeinen Tabellenausdruck aus der Abfrage entfernen.
-- Bei Code 6 die OLAP-Funktion aus der Abfrage entfernen.
-- Bei Code 7 ORDER OF aus der Abfrage entfernen.
-- Bei Code 8 die Abfrage ohne Gesamtauswahl erneut angeben.
-- Bei Code 9 nicht mehrere Threads für die Ausführung der Abfrage verwenden.

Verarbeitung wurde beendet, da die hervorgehobene Anweisung nicht erfolgreich abgeschlossen werden konntemein SQL-befehl ist der:
WITH x as (SELECT a.*, ROW_NUMBER() Over (Order By "SPALTE") as Zeilennummer
From "BIBLIOTHEK"."TABELLE" a)
SELECT * FROM xDie Syntaxprüfung ist erfolgreich.

Wie kann ich weiter vorgehen um das zum laufen zu bringen?

B.Hauser
05-11-07, 06:09
Hallo,

Du musst die Abfrage "OHNE" RowNumber ausführen (siehe meine vorige Antwort bzw. Joblog)!

Ein Routing zur CQE kann mehrere Ursachen haben!
z.B. auf der phyischen Datei liegen logische Dateien mit Select/Omit-Anweisungen oder CCSID-Konvertierungen sind erforderlich.

Deshalb solltest Du die Abfrage Ohne die RowNumber() ausführen, damit man die Ursache, warum die CQE verwendet wurde feststellen kann und dann entsprechend reagieren kann.

Birgitta

BenderD
05-11-07, 11:39
Hallo,

in der SQL Reference sind die Einschränkungen klar dokumentiert (kein read Trigge, keine Multi Member LFs, keine CCSID Conversion, kein ORDER BY etc...) wenn die nicht zutreffen liegt meines Erachtens ein Bug vor, den man an IBM reporten sollte.

mfg

Dieter Bender


hallo,

ich habe genau das gemacht was du gesagt hast... jedoch habe ich nicht rausfinden können ob der Befehl mit der CQE ider SQE ausgeführt wurde.

wenn ich "VisualExplain->Ausführen und Erklären" kommt folgende fehlermeldung:
SQL-Status: 42999
Vendorencode: -255
Nachricht: [SQL0255] Funktion nicht für die Abfrage unterstützt. Ursache . . . .
: Der Ursachencode ist 6:
-- Code 1 -- Skalare Unterauswahl und laterale Korrelation aus einem verschachtelten Tabellenausdruck sind für verteilte Dateien nicht zulässig.
-- Code 2 -- Beim Verwenden einer temporären verteilten Datei ist ein Fehler aufgetreten.
-- Code 3 -- EXCEPT oder INTERSECT wird für diese Abfrage nicht unterstützt.
-- Code 4 -- Ein Sequenzverweis wird bei verteilten Dateien nicht unterstützt.
-- Code 5 -- Ein rekursiver allgemeiner Tabellenausdruck wird für diese Abfrage nicht unterstützt.
-- Code 6 -- Eine OLAP-Funktion wird für diese Abfrage nicht unterstützt.
-- Code 7 -- ORDER OF wird für diese Abfrage nicht unterstützt.
-- Code 8 -- Skalare Gesamtauswahl wird für diese Abfrage nicht unterstützt.
-- Code 9 -- Eine verteilte Datei wird in einem multithread-fähigen Job verarbeitet, oder dies ist nicht der anfängliche Thread. Fehlerbeseitigung: Eine Liste der Maßnahmen zur Fehlerbeseitigung folgt:
-- Bei Code 1 die Abfrage so ändern, dass sie weder skalare Unterauswahl noch Korrelation aus einem verschachtelten Tabellenausdruck verwendet.
-- Bei Code 2 die vorherigen Nachrichten auf weitere Informationen prüfen.
-- Bei Code 3 EXCEPT oder INTERSECT aus der Abfrage entfernen.
-- Bei Code 4 den Sequenzverweis aus der Abfrage entfernen.
-- Bei Code 5 den rekursiven allgemeinen Tabellenausdruck aus der Abfrage entfernen.
-- Bei Code 6 die OLAP-Funktion aus der Abfrage entfernen.
-- Bei Code 7 ORDER OF aus der Abfrage entfernen.
-- Bei Code 8 die Abfrage ohne Gesamtauswahl erneut angeben.
-- Bei Code 9 nicht mehrere Threads für die Ausführung der Abfrage verwenden.

Verarbeitung wurde beendet, da die hervorgehobene Anweisung nicht erfolgreich abgeschlossen werden konntemein SQL-befehl ist der:
WITH x as (SELECT a.*, ROW_NUMBER() Over (Order By "SPALTE") as Zeilennummer
From "BIBLIOTHEK"."TABELLE" a)
SELECT * FROM xDie Syntaxprüfung ist erfolgreich.

Wie kann ich weiter vorgehen um das zum laufen zu bringen?