Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Cursor-Beispiele

Beispiel für einen Cursor mit ORDER BY

Der Cursor CUR_KONTAKTE definiert einen Ausschnitt aus der Tabelle KONTAKT, in dem Nachname, Vorname und Abteilung für Kunden mit Kundennummern > 103 ausgewählt werden. Die Sätze sollen aufsteigend nach Abteilung und innerhalb der Abteilung absteigend nach dem Nachnamen sortiert werden.

DECLARE cur_kontakte CURSOR FOR

SELECT nachname, vorname, abteilung

FROM kontakt WHERE knr > 103

ORDER BY abteilung ASC, nachname DESC

Der Cursor wird mit OPEN geöffnet

OPEN cur_kontakte

Zu diesem Zeitpunkt umfasst die Cursortabelle folgende Sätze:

nachname

vorname

abteilung

Buschmann

Anke


Bauer

Xaver


Heinlein

Robert

Einkauf

Davis

Mary

Einkauf

NULL-Werte sind in obiger Tabelle als leere Felder dargestellt. Bei der Sortierung mit ORDER BY werden in SESAM/SQL NULL-Werte als kleiner als alle Nicht-NULL-Werte betrachtet.

In einem ESQL-Programm kann die Cursortabelle satzweise in einer Schleife gelesen werden. Die Spaltenwerte werden in die Benutzervariablen NAME, VORNAME und AB-TEILUNG übertragen.

FETCH cur_kontakte INTO :NACHNAME,

:VORNAME INDICATOR :INDVORNAME,

:ABTEILUNG INDICATOR :INDABTEILUNG

Beispiel für eine SQL-Datenmanipulation mit Cursor

Der Cursor CUR_MWST wählt alle Leistungen aus, für die keine Mehrwertsteuer berechnet wird. Er wird mit WITH HOLD spezifiziert, so dass er auch nach einem COM-MIT WORK im geöffneten Zustand bleibt, wenn er am Ende der Transaktion im geöffneten Zustand war:

DECLARE cur_mwst CURSOR WITH HOLD FOR

SELECT lnr, ltext, mwsatz

FROM leistung WHERE mwsatz=0.00


OPEN cur_mwst

Zum Zeitpunkt des OPEN erhält man die folgende Cursortabelle:

lnr

ltext

mwsatz

4

Systemanalyse

0.00

5

Datenbankentwurf

0.00

10

Reisekosten

0.00

Für diese Leistungen soll ein Mehrwertsteuersatz von 15% berücksichtigt werden. Mit einer Folge von FETCH- und UPDATE-Anweisungen können die Sätze der Tabelle LEISTUNG geändert werden. Mit FETCH NEXT wird der Cursor auf den ersten Satz positioniert:

FETCH NEXT cur_mwst INTO :LNR,

:LTEXT INDICATOR :INDLTEXT

:MWSATZ INDICATOR :INDMWSATZ


UPDATE leistung SET mwsatz=0.15 WHERE CURRENT OF cur_mwst

Anschließend wird der Cursor auf den zweiten Satz der Cursortabelle positioniert:

FETCH NEXT cur_mwst INTO :LNR,

:LTEXT INDICATOR :INDLTEXT

:MWSATZ INDICATOR :INDMWSATZ


UPDATE leistung SET mwsatz=0.15 WHERE CURRENT OF cur_mwst

Die Transaktion wird mit COMMIT WORK geschlossen. Aufgrund der WITH HOLD-Klausel kann der Cursor auf den dritten Satz der Cursortabelle positioniert werden, indem unmittelbar auf COMMIT WORK eine FETCH-Anweisung eingegeben wird.