set-vars(select a, dbalias b, [c,d,e,f,g,h,i,j for params &1...&8][,k,l,m,n])
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. Die Menge an selektierten Ergebniszeilen wird automatisch auf 1 beschränkt.
Liefert die Datenbank eine Ergebniszeile zurück, wird pro Spalte eine Variable mit Namen VAR_Spaltenname erwartet, wobei der Name in Großbuchstaben umgewandelt wird. Die Variablen müssen im Vorfeld definiert sein. Jede Variable wird mit dem entsprechenden Wert der Spalte belegt. Der Rückgabewert ist der Wert der ersten Spalte. Für ein von VAR_ abweichendes Präfix siehe Parameter n. Wichtiger Hinweis: Egal mit welchem Typ die Variablen im Variablen-Dialog definiert sind, erhalten sie zur Laufzeit nach dem Ausführen der Funktion den Typ String. Der Typ bleibt dann während der Laufzeit erhalten, auch wenn die Variablen z. B. in anderen Funktionen verwendet werden. Im Variablen-Dialog selbst wird der Typ dadurch aber nicht umgestellt.
Sind in der Ergebnismenge Spalten vom Typ BLOB, wird über den Parameter l festgelegt, ob die Binärdaten Base64-kodiert in die Ergebnislisten geschrieben werden sollen oder nicht. Ist l 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.
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 |
Parameter &1 im Statement. |
d |
Parameter &2 im Statement. |
e |
Parameter &3 im Statement. |
f |
Parameter &4 im Statement. |
g |
Parameter &5 im Statement. |
h |
Parameter &6 im Statement. |
i |
Parameter &7 im Statement. |
j |
Parameter &8 im Statement. |
k |
(optional) true, wenn Daten aus einer Spalte vom Typ BLOB Base64-kodiert in die Ergebnislisten aufgenommen werden sollen. Default: false. |
l |
(optional) true für "read only"-Modus. |
m |
(optional) true wenn die Displaynamen statt der Spaltennamen verwendet werden sollen (siehe drittes Beispiel). Default: false. |
n |
(optional) Abweichendes Präfix für die Variablennamen. Default: VAR_ |
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 |
Ergebnis |
Variablenwerte |
select zipcode, city, county from zipcodes |
testdb |
|
|
|
|
|
|
1067 |
VAR_ZIPCODE=1067 VAR_CITY=Dresden VAR_COUNTY=Sachsen |
select city as town, zipcode as zip, county from zipcodes where zipcode = &1 |
testdb |
80336 |
|
|
|
|
|
München |
VAR_ZIPCODE=80336 VAR_CITY=München VAR_COUNTY=Bayern |
select city as town, zipcode as zip, county from zipcodes where zipcode = @1:i@ |
testdb |
80336 |
|
|
|
|
|
München |
VAR_ZIPCODE=80336 VAR_CITY=München VAR_COUNTY=Bayern |
select city as town, zipcode as zip, county from zipcodes where zipcode = &1 |
testdb |
80336 |
|
|
|
true |
|
München |
VAR_ZIP=80336 VAR_TOWN=München VAR_COUNTY=Bayern |
select city as town, zipcode as zip, county from zipcodes where city = @1:s@ |
testdb |
München |
|
|
|
true |
var__ |
München |
var__ZIP=80001 var__TOWN=München var__COUNTY=Bayern |
select city as town, zipcode as zip, county from zipcodes where county = &1 |
testdb |
Bayern |
|
|
|
true |
|
Fehler, da Textliterale in Hochkommas stehen müssen. |
|
Siehe auch
Klasse DefaultSQLCron zum Thema Parameter für "Prepared Statements"
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,[param &1 = c], d,e, f,g,h,i,j], delimiter k, map 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])