call db procedure a, alias b,c,d,e,f
Gruppe |
Ruft eine Stored Procedure in einer Datenbank auf. Parameter a enthält den Aufruf der Stored Procedure, b gibt den Datenbank-Alias an. In c wird der Name einer Liste erwartet, in der sich die für den Aufruf der Stored Procedure zu verwendenden Eingabeparameter befinden. Die Eingabeparameter im Stored-Procedure-Aufruf in Parameter a sind in der Notation @index:type@ anzugeben, also z. B. @0:s@,@1:f@. Der Index beginnt bei 0.
Hinweis: Wir sprechen hier von Parametern dieser Funktion und von Eingabeparametern und Ausgabeparametern der Stored Procedure.
Parametertypen in Parameter a
i |
Integer. |
l |
Long. |
f |
Float. |
r |
Double oder Real. |
d |
Date. |
t |
Timestamp. |
s |
Varchar oder String. |
b |
BLOB. |
In Parameter d wird eine Liste von Positionsnummern (beginnend mit 1) erwartet, anhand derer Werte aus dem Resultset entnommen werden. Parameter e legt dann (ebenfalls als Positionsnummer) fest, welcher Wert der in d definierten Werte als Ergebnis der Funktion verwendet werden soll.
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 e gesetzt werden.
Parameterbeschreibung
Parameter |
Beschreibung |
a |
SQL für den Aufruf der Stored Procedure. |
b |
|
c |
Name der Liste, die die Eingangsparameterwerte für die Stored Procedure enthält. Hinweis: Die Übergabe der Werte an die Liste sollte typgerecht erfolgen, wie im Prozeduraufruf in Parameter a angegeben, also im Beispiel der erste Wert plus als String, die beiden anderen als Integer. |
d |
Komma-separierte Liste von Positionen, die definieren, welche Spalten des Resultsets des Stored-Procedure-Aufrufs als Ausgangsparameter-Werte der Stored Procedure interpretiert werden. Dadurch wird also eine Liste von Ausgangsparameter-Werten erzeugt. Der Index beginnt 1. Hinweis: Wird d leer gelassen, dann wird also keine Ausgangsparameter-Liste definiert. |
e |
Position in der in d erzeugten Liste von Ausgangsparameterwerten. Der Wert dieser Position wird als Ergebnis der Funktion zurückgegeben. Der Index beginnt mit 1. Wird -1 gesetzt, gibt die Funktion true im Erfolgsfall (des Stored-Procedure-Aufrufs) oder false im Fehlerfall zurück. Letzteres würde sonst eine Exception erzeugen. |
f |
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. |
Wenn die Parameter typgerecht in die Liste c eingefügt wurden, kann die Aufzählung der Aufrufparameter im SQL-Kommando a durch die Funktion selbst berechnet werden. Anstelle der Syntax …(@0:s@,@1:f@)… wird dann der Platzhalter (@columns@) verwendet, der innerhalb der Funktion aufgelöst wird. Der Platzhalter muss ohne Leerzeichen geschrieben werden.
Beispiel: Wenn in die Liste c der Reihe nach ein String, zwei Integer und ein Double eingefügt werden, wird der in Parameter a enthaltene Platzhalter (@columns@) vor dem Aufruf der Procedure ersetzt durch (@0:s@,@1:i@,@2:i@,@3:r@).
Um Fehler durch falsche Anzahl der List-Items zu erkennen, kann der Platzhalter auch die Anzahl der Aufrufparameter festlegen: (@columns[4]@). Wenn mehr als 4 Werte in der Liste stehen, werden die überzähligen ignoriert. Wenn weniger Werte in der Liste stehen, als die geforderte Anzahl erfolgt ein Abbruch mit Fehlermeldung.
Beispiele
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
Die für den Funktionsaufruf verwendete Liste c wird über den Aufruf von add to list(value a, name of list b) mit folgenden Parametern gefüllt.
Parameter a |
Parameter b |
plus |
paramList |
1 |
paramList |
2 |
paramList |
Im Folgenden wird die Stored Procedure mit unterschiedlichen Parametern aufgerufen. Hinweis: Die Beispiele gelten 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 |
Parameter b |
Parameter c |
Parameter d |
Parameter e |
Parameter f |
Ergebnis der Funktion |
call adding_test(@0:s@,@1:i@,@2:i@,@3:r@) |
hub |
paramList |
1,4 (Hinweis: Aus dem Resultset (added,1,2,3.0) werden also die Positionen 1 und 4 entnommen, wodurch die Liste (added,3.0) entsteht.) |
2 (Hinweis: Aus der Liste (added,3.0) wird die zweite Position entnommen.) |
|
3.0 |
call adding_test(@0:s@,@1:i@,@2:i@,@3:r@) |
hub |
paramList |
1,4 |
1 |
|
added |
call adding_test(@0:s@,@1:i@,@2:i@,@3:r@) |
hub |
paramList |
1,4 |
-1 |
|
true |
call nonexist(@0:s@,@1:i@,@2:i@,@3:r@) |
hub |
paramList |
1,4 |
1 |
|
Führt zu einer Exception, da es keine Stored Procedure mit dem angegebenen Namen gibt. |
call nonexist(@0:s@,@1:i@,@2:i@,@3:r@) |
hub |
paramList |
1,4 |
-1 |
|
false |
Siehe auch
Abschnitt Aufruf einer Stored Procedure
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
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])