Zur Vereinfachung der Handhabung von Paginierungs-Queries bietet Oracle 12c eine recht handliche neue Syntax an, in deren Zentrum das Schlüsselwort FETCH steht, das hinter der ORDER BY Klausel folgt und den Abschnitt der Ergebnismenge definiert, der geliefert werden soll. Bei Tim Hall findet man - wie üblich - eine detaillierte Beschreibung des Features, inclusive übersichtlicher Beispiele. Einige der einfachsten Fälle wären:
Jonathan Lewis hat sich mit der internen Implementierung des Features beschäftigt und via CBO Trace die intern erzeugte Query bestimmt, die in solchen Fällen abgesetzt wird, und die neben den abgefragten Daten noch ein paar einfache analytische Funktionen (count, row_number, rank) enthält, die die Auswahl des gewünschten Abschnitts möglich machen. Es handelt sich also auch in diesem Fall nicht um schwarze Magie, sondern nur um eine syntaktische Abkürzung - was das Feature aber nicht weniger nützlich macht. Oder wie der Herr Lewis schreibt:
-- 12.1.0.1 drop table t; create table t as select rownum id from dual connect by level <= 20; -- liefert nur die ersten fünf Datensätze select id from t order by id fetch first 5 rows only; ID ---------- 1 2 3 4 5 -- überspringt fünf Datensätze und -- liefert danach die folgenden fünf Datensätze select id from t order by id offset 5 rows fetch first 5 rows only ID ---------- 6 7 8 9 10 -- liefert die ersten 20% der Datensätze select id from t order by id fetch first 20 percent rows only ID ---------- 1 2 3 4
Jonathan Lewis hat sich mit der internen Implementierung des Features beschäftigt und via CBO Trace die intern erzeugte Query bestimmt, die in solchen Fällen abgesetzt wird, und die neben den abgefragten Daten noch ein paar einfache analytische Funktionen (count, row_number, rank) enthält, die die Auswahl des gewünschten Abschnitts möglich machen. Es handelt sich also auch in diesem Fall nicht um schwarze Magie, sondern nur um eine syntaktische Abkürzung - was das Feature aber nicht weniger nützlich macht. Oder wie der Herr Lewis schreibt:
Oracle is basically taking a nice, easily readable syntax, and converting it behind the scenes to the sort of SQL we would once have written by hand. (That’s a good thing, of course – clarity of code does protect you from accidents, and it’s best if messy rewrites are handled by machines rather than error-prone people).
Zusätzlich hat Jonathan Lewis dann auch noch einen Artikel zum Verhalten des Features unter dem Einfluss von Parallelisierung geschrieben, der zeigt, dass die Verteilung der Arbeit auf die Slaves unter Umständen recht unausgewogen sein kann.
This query can also be extended by using a code which helps the DBA to improvise it accordingly,
AntwortenLöschenas this was also mentioned in ORACLE FORUMS which helped me a lot for solving queries.
Hello Eva,
Löschenthank you for your comment. Could you elaborate which code on the linked website you have in mind?