SQL_Cursor

Erzeugt einen Datenbank-Cursor, über den Datensätze gelesen werden können.

Prototype


SQL_Cursor( query )

Parameter


ParameterTypBedeutung
querystringSelect-Statement

Rückgabewert


NummerTypBedeutung
1userdata/nilEin Cursor-Objekt oder 'nil', wenn das übergebene Select-Statement fehlerhaft ist.
2stringNur im Fehlerfall: Fehlermeldung der Datenbank.

Methode fetch


Liest den nächsten Datensatz.

Prototyp

fetch( [table[, modus]] )

Parameter

ParameterTypBedeutung
tabletableoptional: table, in den die von der Datenbank gelesenen Felder reingeschrieben werden. Wird keiner übergeben, werden alle Felder der Reihe nach zurückgegeben (siehe auch Beispiel).
modusstringoptional: "n" bedeutet, dass die als Ergebnis zurückgegebene Table numerische Indizes bekommt (1..n), "a" erzeugt alphanumerische Indizes (die Feldnamen aus der Datenbank). Wird der Parameter nicht übergeben, werden numerische Indizes zurückgegeben.

Rückgabewerte

NummerTypBedeutung
1string/number/bool/tableJe nach dem 1. Parameter der Methode ein Table mit den Ergebnissen, oder aber ein oder mehrere Rückgabewerte des entsprechenden Typs.

Methode getcolnames


Liefert eine Liste der Feldnamen.

Prototyp

getcolnames()

Rückgabewerte

NummerTypBedeutung
1tabletable, der die einzelnen Feldnamen enthält.

Methode close


Schließt den Cursor

Prototyp

close()

Beispiel


-- Vor-/Nachname und Geburtsdatum aller aktiven Mitarbeiter im Personalstamm...
local query = "SELECT vname, nname, gebdat FROM gpktab WHERE finr = " .. SysLogFinr .. " AND status = 'A'"
local cursor = assert( SQL_Cursor( query ) )

local vname, nname, gebdat = cursor:fetch() -- den ersten Datensatz lesen
SY_Proto( vname, nname, gebdat ) -- und ins Protokoll ausgeben

local res = cursor:fetch({}) -- nächsten Datensatz lesen, diesmal aber in einen table
SY_Proto( res[1], res[2], res[3] ) -- ... und ausgeben

res = cursor:fetch( res, "a" ) -- den nächsten Datensatz in den gleichen table wie eben einlesen (mit alphanumerischen Keys)
SY_Proto( res.vname, res.nname, res.gebdat ) -- und ausgeben

-- solange weiterfetchen und ausgeben, bis nix mehr kommt
while res do
   SY_Proto( res.vname, res.nname, res.gebdat )
   res = cursor:fetch( res, "a" )
end

-- Cursor schliessen
cursor:close()