executeProcedure
Versionshinweise | ab 17.1.11 (von 12.2 - 17.1.11 --> LogicScriptUtils.executeProcedure(); Alte Skripte sind weiterhin lauffähig!) |
---|
Code
Serializable[] SQLUtils.executeProcedure(String statement, Serializable[] parameter, Class[] resultTyps)
Beschreibung
Führt eine SQL-Prozedur (stored procedure) mit den übergebenen Parametern aus.
Man beachte, dass Prozeduren keine Funktionen sind. Um eine Funktion aufzurufen, muss man zusätzlich eine Prozedur schreiben, die die gewünschte Funktion aufruft und ihr Ergebnis als out-Parameter zurückgibt.
- statement - Ein SQL Statement zum Aufruf eine Prozedur. Parameter werden mit "?" gekennzeichnet. Die Ausgabeparameter müssen nach den Eingabeparametern definiert werden.
- parameter - Ein Array von Werten. Sie werden an die in-Parameter der Prozedur übergeben.
- resultTyps - Ein Array von Java-Klassen, welche den out-Parametern der Prozedur entsprechen.
Unter Groovy ist zu beachten, dass man die Arrays nicht mit dem new-Befehl von Java erzeugen kann. Der Befehl muss daher so aufgerufen werden:
Serializable[] params = [ value1 ]
Class[] resultclasses = [ Integer.class ]
Serializable[] ret = SQLUtils.executeProcedure("...", params, resultclasses)
Der Befehl gibt die out-Parameter als Array zurück, und zwar umgewandelt in die Klassen, die man in resultclasses angegeben hat.
Beispiele
- für MS SQL
CREATE PROCEDURE DoSomething (@param1 VARCHAR(50), @return VARCHAR(100) OUTPUT) AS
BEGIN
SET @return = 'Prozedur ''DoSomething'' wurde mit Parameter ' + @param1 + ' aufgerufen';
END
Serializable[] params = [ "Parameter 1"]
Class[] classes = [ String.class ]
Serializable[] ret = LogicScriptUtils.executeProcedure("{call dbo.DoSomething(?,?)}", params, classes);
- für Oracle
CREATE OR REPLACE PROCEDURE evijet.DoSomething(p_param1 IN varchar2, p_return OUT varchar2) AS
BEGIN
p_return := 'Prozedur ''DoSomething'' wurde mit Parameter ' || p_param1 || ' aufgerufen';
END;
Serializable[] params = [ "Parameter 1"]
Class[] classes = [ String.class ]
Serializable[] ret = LogicScriptUtils.executeProcedure("call evijet.DoSomething(?,?)", params, classes);
Hinweis
Beim Aufruf einer SQL Prozedur ist dringend auf die Ein- / Ausgabeparameter zu achten. Gibt die Prozedur beispielsweise keinen Wert zurück, so darf auch keine Klasse für den Rückgabewert angegeben werden.
Serializable[] params = [ "Parameter 1"]
Class[] classes = []
executeSQLProcedure("exec <Name der Prozedur>", params, classes);
Falls hier ein Fehler unterläuft, kann die Prozedur nicht ausgeführt werden.