call db procedure a, alias b,c,d,e,f


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

Datenbank-Alias.

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