Anfang des Inhaltsbereichs

FETCH-Anweisung (fetch_statement) Dokument im Navigationsbaum lokalisieren

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>

result_table_name, parameter_spec, unsigned_integer, integer

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.
Ist das nicht möglich oder ändert der Benutzer selber in dieser Tabelle, ist die Angabe von FOR REUSE notwendig. Zwischenzeitlich durchgeführte Änderungen sind dann nicht sichtbar.

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.

Ende des Inhaltsbereichs