select into map(a,b,[param &1 = c], d,e, f,g,h,i,j], delimiter k, map l,m,n,o,p)
Gruppe |
Führt einen SQL-Select-Befehl a auf der Datenbank aus, die durch den Alias b repräsentiert wird. Im Statement hinterlegte Platzhalter der Form &Parameternummer werden durch die Werte ab Parameter c bis j ersetzt. Zeichen, die für eine gültige Syntax des Statements erforderlich sind (z. B. Hochkommas um Zeichenketten) müssen bereits im Statement enthalten sein. Eine Begrenzung der Ergebnismenge findet nicht statt. Sollten also weniger Zeilen gelesen werden, muss dies über eine entsprechende LIMIT-Anweisung im SQL geschehen.
Die Ergebnistabelle wird in eine Named Map mit Namen l geschrieben. Der Wert der ersten Spalte wird hierbei als Schlüssel angesehen, die restlichen Spalten der Ergebniszeile werden - durch Trennzeichen k getrennt - zu einer Zeichenkette zusammengefasst und unter dem Schlüssel als Wert in der Map abgelegt. Vor dem Schreiben in die Map wird diese geleert (kann mit Parameter o unterdrückt werden).
Der Rückgabewert der Funktion ist die Anzahl an erhaltenen Datensätzen.
Sind in der Ergebnismenge Spalten vom Typ BLOB, wird über den Parameter m festgelegt, ob die Binärdaten Base64-kodiert in die Ergebnislisten (Einträge der Map) geschrieben werden sollen oder nicht. Ist m gleich true, wird Base64-kodiert, ansonsten bleiben die Daten unverändert. Gibt es keine solchen Spalten in der Ergebnismenge, hat der Wert des Parameters keinen Effekt.
Wichtiger Hinweis: Neben der Schreibweise &Parameternummer ist auch die Schreibweise für Prepared Statements in der Form @Parameternummer:Parametertyp@ möglich. Diese verhindert sogenannte SQL Injection Attacks und ist daher zu bevorzugen.
Parameterbeschreibung
Parameter |
Beschreibung |
a |
Auszuführendes SQL-Statement. |
b |
|
c |
(optional) Parameter &1 im Statement. |
d |
(optional) Parameter &2 im Statement. |
e |
(optional) Parameter &3 im Statement. |
f |
(optional) Parameter &4 im Statement. |
g |
(optional) Parameter &5 im Statement. |
h |
(optional) Parameter &6 im Statement. |
i |
(optional) Parameter &7 im Statement. |
j |
(optional) Parameter &8 im Statement. |
k |
Trennzeichenfolge. |
l |
Name der Map. |
m |
(optional) true, wenn Daten aus einer Spalte vom Typ BLOB Base64-kodiert in die Ergebnislisten aufgenommen werden sollen. Default: false |
n |
true für "read only"-Modus. |
o |
(optional) true, wenn die Map vor dem Schreiben nicht gelöscht werden soll. Default: false |
p |
(optional) Falls true, dann werden SQL-Fehler, die von der Datenbank gemeldet werden, ignoriert. Default: <leer> (== false). |
Beispiele
Gegeben sei eine Tabelle zipcodes, die die Postleitzahlen von Deutschland enthalte (insgesamt imaginäre 20000 Einträge).
Parameter a |
b |
c |
d…j |
k |
l |
m |
n |
o |
p |
Ergebnis |
select zipcode, city, county from zipcodes |
testdb |
|
|
; |
ZIPS |
|
|
false |
|
20000 |
Das Ergebnis ist eine Map ZIPS, die 20000 Einträge mit der Postleitzahl als Schlüssel und der Stadt und deren Bundesland als Wert enthält, z. B. {80336=München;Bayern}.
Parameter a |
b |
c |
d…j |
k |
l |
m |
n |
o |
p |
Ergebnis |
select zipcode, city, county from zipcodes where zipcode = &1 |
testdb |
80336 |
|
; |
ZIPS |
|
|
false |
|
1 |
select zipcode, city, county from zipcodes where zipcode = @1:i@ |
testdb |
80336 |
|
; |
ZIPS |
|
|
false |
|
1 |
Erzeugt die zuvor genannte Map mit ausschließlich dem oben genannten Eintrag.
Parameter a |
b |
c |
d..j |
k |
l |
m |
n |
o |
p |
Ergebnis |
select zipcode, city, county from zipcodes where county = '&1' |
testdb |
Bayern |
|
; |
ZIPS |
|
|
false |
|
1500 |
select zipcode, city, county from zipcodes where county = @1:s@ |
testdb |
Bayern |
|
; |
ZIPS |
|
|
false |
|
1500 |
select zipcode, city, county from zipcodes where county = &1 |
testdb |
Bayern |
|
; |
ZIPS |
|
|
false |
|
Fehler, da Textliterale in Hochkommas stehen müssen. |
Erzeugt in den ersten beiden Fällen die zuvor genannte Map mit allen bayerischen Postleitzahlen.
Siehe auch
DefaultSQLCron (für die Parameter-Notation)
select into list(select a, dbalias b, [c,d,e,f,g,h,i,j],k,l,[m,n,o,p])
select into map(a,b,list name c, delimiter d, map e,f,g,h,i)
select-statement a [[param &1 = c], d,e, f,g,h,i,j], default k,l,m,n dbAlias = b
call db procedure a, alias b, [c,d,e,f,g,h,i,j],k,l,m,[n],o,[p]
update-statement a, alias b [[param &1 = c],d,e,f,g,h,i,j,[k],[l],[m]]
exists db-row(select-statement a [[param &1 = c], d,e,f,g,h,i,j,k,l])
set-vars(select a, dbalias b, [c,d,e,f,g,h,i,j for params &1...&8][,k,l,m,n])