FETCH-Anweisung (fetch_statement)
Die FETCH-Anweisung (
fetch_statement) weist Parametern die Werte der aktuellen Zeile einer Ergebnistabelle (siehe Ergebnistabellenname) zu.Syntax
<fetch_statement> ::=
FETCH [FIRST | LAST | NEXT | PREV | <position> | SAME] [<result_table_name>] INTO <parameter_spec>,...
<position> ::= POS (<unsigned_integer>) | POS (<parameter_spec>)
| ABSOLUTE <integer> | ABSOLUTE <parameter_spec>
| RELATIVE <integer> | RELATIVE <parameter_spec>
Erläuterung
Wenn kein Name einer Ergebnistabelle angegeben wurde, bezieht sich die FETCH-Anweisung auf die zuletzt erzeugte unbenannte Ergebnistabelle (siehe
benannte/unbenannte Ergebnistabelle).Je nach Suchstrategie wird die Suche nach allen Zeilen der Ergebnistabelle bei der Ausführung der
OPEN CURSOR-Anweisung bzw. SELECT-Anweisung (select_statement) oder SELECT-Anweisung (named_select_statement) durchgeführt und die Ergebnistabelle physisch erzeugt oder jeweils die nächste Zeile der Ergebnistabelle bei der Ausführung einer FETCH-Anweisung gesucht und nicht physisch gespeichert. Dies ist beim Zeitverhalten von FETCH-Anweisungen zu berücksichtigen. Außerdem kann das je nach gewähltem Isolation-Level auch dazu führen, daß bei einem FETCH Sperrprobleme auftreten, z. B. Rückmeldung 500 – Timeout für Sperranforderung.Zeile nicht gefunden
Sei C der Standpunkt in der Ergebnistabelle. Es wird die Rückmeldung
100 – Zeile nicht gefunden ausgegeben, und es erfolgt keine Zuweisung von Werten an die Parameter, wenn eine der folgenden Bedingungen erfüllt ist:FIRST | LAST | NEXT | PREV
Position: POS
Unabhängig von der Angabe einer
ORDER-Klausel existiert implizit eine Ordnung der Zeilen einer Ergebnistabelle, so daß eine interne Numerierung möglich ist. Diese kann durch Angabe einer ROWNO-Spalte als selektierte Spalte sichtbar gemacht werden. Die Angabe einer Position bezieht sich auf diese interne Numerierung.Bei der Angabe einer Position mittels POS muß die Parameterspezifikation eine positive ganze Zahl bezeichnen.
Wenn mittels POS eine Position angegeben wurde, die kleiner oder gleich der Anzahl der Zeilen der Ergebnistabelle ist, wird C auf die entsprechende Zeile gesetzt, und die Werte dieser Zeile werden den Parametern zugewiesen. Wenn eine Position angegeben wurde, die größer als die Anzahl der Zeilen der Ergebnistabelle ist, erfolgt die Rückmeldung
100 – Zeile nicht gefunden.Position: ABSOLUTE
Sei x der Wert der Integer-Zahl (
integer) bzw. der Parameterspezifikation, die bei der Positionsangabe angegeben werden. Sei abs_x der Absolutbetrag von x.Position: RELATIVE
Sei x der Wert der Integer-Zahl (
integer) bzw. der Parameterspezifikation, die bei der Positionsangabe angegeben werden. Sei abs_x der Absolutbetrag von x.FETCH SAME
Die zuletzt ermittelte Zeile der Ergebnistabelle wird nochmals ausgegeben.
Parameterspezifikation
Die in position angegebene
Parameterspezifikation muß eine ganze Zahl bezeichnen.Die übrigen durch die Parameterspezifikationen angegebenen Parameter sind Ausgabeparameter. Der durch die n-te Parameterspezifikation identifizierte Parameter korrespondiert mit dem n-ten Wert der aktuellen Zeile der Ergebnistabelle. Wenn diese Zeile mehr Spalten hat, als Parameter spezifiziert wurden, werden Werte der Spalten ignoriert, für die keine korrespondierenden Parameter existieren. Wenn die Zeile weniger Spalten hat, als Parameter spezifiziert wurden, werden den überzähligen Parametern keine Werte zugewiesen. Für die Zuweisung von
NULL-Werten oder Spezial-NULL-Werten muß ein Indikatorname angegeben werden.Zahlen werden umgewandelt und Zeichenketten abgeschnitten oder verlängert, wenn das zur Anpassung an die korrespondierenden Parameter erforderlich ist. Wenn während der Zuweisung eines Wertes an einen Parameter ein Fehler auftritt, wird diese Zuweisung nicht ausgeführt, und es erfolgen auch keine weiteren Zuweisungen an korrespondierende Parameter aufgrund dieser FETCH-Anweisung. Schon erfolgte Zuweisungen von Werten an Parameter bleiben erhalten.
Sei p ein Parameter und v der entsprechende Wert in der aktuellen Zeile der Ergebnistabelle.
Weitere Informationen
Wurde in der QUERY-Anweisung kein FOR REUSE (siehe
SELECT-Anweisung) angegeben, können nachfolgende INSERT-, UPDATE- oder DELETE-Anweisungen, die sich auf die zugrundeliegende Basistabelle beziehen und von dem Benutzer selber oder von anderen Benutzern abgesetzt werden, dazu führen, daß das mehrmalige Absetzen einer FETCH-Anweisung trotz gleicher Angabe der Position unterschiedliche Zeilen der Ergebnistabelle bezeichnet.Änderungen durch andere Benutzer können durch eine
LOCK-Anweisung für die gesamte Tabelle oder die Verwendung des Isolation-Level 2, 3, 15, 20 oder 30 bei der CONNECT-Anweisung oder der LOCK-Option der QUERY-Anweisung verhindert werden.Enthält die Ergebnistabelle
LONG-Spalten und wurde die Ergebnistabelle physisch erzeugt, ist bei Verwendung der Isolation-Levels 0, 1 und 15 nicht sichergestellt, daß Konsistenz zwischen dem Inhalt der LONG-Spalten und dem der übrigen Spalten herrscht. Wurde die Ergebnistabelle nicht physisch erzeugt, ist die Konsistenz nur im Isolation-Level 0 nicht sichergestellt. Es wird deshalb empfohlen, durch Verwendung einer LOCK-Anweisung oder der Isolation-Levels 2, 3, 20 oder 30 die Konsistenz sicherzustellen.