call db procedure a, alias b, [c,d,e,f,g,h,i,j],k,l,m,[n],o,[p]
Gruppe |
Ruft eine Stored Procedure in einer Datenbank auf. Parameter a beschreibt den Aufruf, b gibt den Datenbank-Alias an. Optionale Parameter c bis j geben die Eingabeparameter der Prozedur an. Diese sind in der Notation @index:type@ anzugeben, also z. B. @0:s@,@1:f@. Der Index beginnt bei 0. Maximal 8 Prozedur-Eingabeparameter sind möglich. Für mehr als 8 Eingabeparameter verwenden Sie bitte die Funktion call db procedure a, alias b,c,d,e,f. Wichtiger Hinweis: Wir sprechen hier von Parametern dieser Funktion und von Eingabeparametern und Ausgabeparametern der Stored Procedure.
Parameter k ist eine durch Komma getrennte Liste von Indizes, die die Positionen im Resultset der aufgerufenen Stored Procedure definieren, die als Ausgabeparameter interpretiert werden. Der Index beginnt bei 1. Das erzeugt eine interne Liste von Ausgabeparameterwerten. Parameter l legt dann fest, welcher der Ausgabeparameterwerte in dieser internen Liste als Ergebnis der Funktion zurückgegeben werden soll. Der Index beginnt bei 1. Siehe dazu das Beispiel unten.
Hinweis: Manche Datenbanken liefern im Resultset die Eingangsparameter und Ausgangsparameter der Stored Procedure im Resultset zurück (z. B. MySQL, siehe Beispiel unten). Andere Datenbanken dagegen liefern im Resultset nur die Ausgangsparameter der Stored Procedure zurück. Entsprechend muss dann natürlich der Parameter k gesetzt werden.
Steht Parameter n auf true, wird bei einem Fehler nochmals versucht, die Prozedur zu rufen.
Parameterttypen
i |
Integer. |
l |
Long. |
f |
Float. |
r |
Double oder Real. |
d |
Date. |
t |
Timestamp. |
s |
Varchar oder String. |
b |
BLOB. |
Parameterbeschreibung
Parameter |
Beschreibung |
a |
SQL für den Aufruf der Stored Procedure. |
b |
|
c |
(optional) Eingabeparameter für die Stored Procedure. |
d |
(optional) Eingabeparameter für die Stored Procedure. |
e |
(optional) Eingabeparameter für die Stored Procedure. |
f |
(optional) Eingabeparameter für die Stored Procedure. |
g |
(optional) Eingabeparameter für die Stored Procedure. |
h |
(optional) Eingabeparameter für die Stored Procedure. |
i |
(optional) Eingabeparameter für die Stored Procedure. |
j |
(optional) Eingabeparameter für die Stored Procedure. |
k |
Komma-separierte Liste von Indizes, die die Positionen im Resultset der aufgerufenen Stored Procedure definieren, die als Ausgabeparameter interpretiert werden. Als Ergebnis wird eine interne Liste von Ausgabeparameterwerten erzeugt. Der Index beginnt bei 1. Hinweis: Wird k leer gelassen, dann wird also keine Ausgangsparameter-Liste definiert. |
l |
Position des Ausgabeparameterwertes in der internen Liste (siehe k), dessen Wert nach dem Aufruf als Ergebnis der Funktion zurückgegeben werden soll. Der Index beginnt bei 1. Wird -1 gesetzt, gibt die Funktion true für einen erfolgreichen Aufruf der Stored Procedure zurück oder false im Fehlerfall. Letzteres würde sonst eine Exception erzeugen. |
m |
Maximale Anzahl an zu lesenden Zeilen. Default: 1. Hinweis: Gewisse Datenbanken führen datenverändernde Statements (UPDATE, DELETE) nur für so viele Zeilen aus, wie als maximale Zeilenanzahl eingestellt wurde. In diesem Fall sollte der Wert 0 (unbegrenzt) gesetzt werden, damit mehr als eine Zeile verändert/gelöscht wird. |
n |
(optional) true für weiteren Versuch bei Fehlern, false für keinen weiteren Versuch. Default: true. |
o |
(optional) Wird hier der Name einer Named List oder Map (siehe Parameter p) angegeben, dann werden darin die Ausgangsparameter der Stored Procedure gespeichert. Die Liste wird davor immer geleert. Default: <leer>. Hinweis: Es wird in beiden Fällen nur die erste Zeile des Resultsets verwendet. |
p |
(optional) true für eine Map und false für eine Liste (siehe Parameter o). Im Falle einer Map wird als Key der Spaltenname verwendet. Default: false. |
Beispiel
Gegeben sei folgende Stored Procedure (unter Verwendung von MySQL).
CREATE
PROCEDURE
`adding_test`
(INOUT p1
VARCHAR
(10),
IN
p2
INTEGER
,
IN
p3
INTEGER
,
OUT
p4
REAL
)
BEGIN
DECLARE
answer
VARCHAR
(10);
DECLARE
result
REAL
;
IF p1 =
'plus'
THEN
SET
answer =
'added'
;
SET
result = p2 + p3;
ELSE
SET
answer =
'subtracted'
;
SET
result = p2 - p3;
END
IF;
select
answer
into
p1;
select
result
into
p4;
END
Im Folgenden wird die Stored Procedure aufgerufen. Hinweis: Das Beispiel gilt für den Aufruf in einer MySQL-Datenbank. Falls die Stored Procedure unter MSSQL definiert wurde, verwenden Sie bitte die Syntax {call adding_test(@0:s@,@1:i@,@2:i@,@3:r@)} (also das SQL-Statement in geschweifte Klammern setzen). Wenn die Datenbank über einen Konnektor angebunden ist, dann muss statt call der Befehl execute verwendet werden. Für andere Datenbanken entnehmen Sie die korrekte Syntax bitte der Dokumentation des jeweiligen Herstellers.
Parameter a |
call adding_test(@0:s@,@1:i@,@2:i@,@3:r@) |
Parameter b |
hub |
Parameter c |
plus |
Parameter d |
1 |
Parameter e |
2 |
Parameter f |
0 |
Parameter k |
4 |
Parameter l |
1 |
Parameter m |
|
Parameter n |
|
Parameter o |
|
Parameter p |
|
Ergebnis |
3.0 |
Der Aufruf wird umgesetzt zu call adding_test('plus',1,2,0). Parameter k beschreibt, dass Position 4 des Resultsets als Ausgabeparameter der aufgerufenen Stored Procedure zu interpretieren ist und l=1 beschreibt, dass der erste Ausgabeparameter (und hier gibt es ja nur einen, nämlich Position 4 des Resultsets) als Ergebnis der Funktion verwendet werden soll.
Aus dem Resultset (added,1,2,3.0) wird also die Position 4 entnommen, wodurch die interne Liste (3.0) entsteht. Aus dieser Liste wird die erste Position entnommen. Dadurch ergibt sich also als Ergebnis der Funktion der Wert 3.0.
Siehe auch
Zeitgesteuerte eigene Klasse DefaultSQLCron für 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,[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
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])