Advanced   Java   Services Stored Procedures/Functions Back Next Up Home


Aufruf einer Prozedur bzw.Funktion, Wertübergabe, IN und OUT Parameter, Wertrückgabe

Im folgenden werden nur kleine Beispiele gezeigt, mit denen die Vorgehensweise sichtbar wird.





Aufruf einer Prozedur, die keine Parameter übergeben bekommt
Callable Statement cs = conn.prepareCall( "{call procedure_name}" );

Aufruf einer Prozedur, die 3 Parameter übergeben bekommt
Callable Statement cs = conn.prepareCall( "{call procedure_name(?, ?, ?)}" );

Die Parameter können reine Übergabeparameter (IN Parameter) sein oder reine Ausgabeparameter (OUT Parameter) oder beides (IN OUT Parameter).


Aufruf einer Funktion, die keine Parameter übergeben bekommt, aber einen Wert zurückgibt
Callable Statement cs = conn.prepareCall( "{? = call function_name}" );

Eine Funktion gibt immer genau einen Wert zurück, unabhängig von zusätzlich möglichen Übergabeparametern, die wieder IN oder OUT oder IN OUT sein können.


Aufruf einer Funktion, die zwei Parameter übergeben bekommt und einen Wert zurückgibt
Callable Statement cs = conn.prepareCall( "{? = call function_name(?, ?)" );

Die in einem Aufruf gesetzten Fragezeichen stehen für Parameter, die nachgeliefert werden müssen oder in denen ein Ergebnis nach dem Aufruf liegt. Die Fragezeichen werden von links nach rechts beginnend bei 1 durchnumeriert.


IN Parameter müssen gesetzt werden
CallableStatement cs = conn.prepareCall( "{call procedure_name(?, ?)}" );
                  cs.setInt(1, 25);
                  cs.setString(2, "wzlbrmpft");

Der erste Parameter der set-Methoden gibt die Position an, 2 etwa steht für das zweite Fragezeichen. Mit dem zweiten Parameter wird er zu setzende Wert übergeben.


OUT Parameter müssen registriert werden
CallableStatement cs = conn.prepareCall( "{call procedure_name(?, ?, ?)}" );
                  cs.setInt(1, 25);
                  cs.registerOutParameter(2, java.sql.Types.DOUBLE);
                  cs.registerOutParameter(3, java.sql.Types.VARCHAR);

Hier sind der zweite und der dritte Parameter OUT Parameter.




Der Returnwert wird wie ein OUT-Parameter registriert
CallableStatement cs = conn.prepareCall( "{ ? = call procedure_name(?, ?)}" );
                  cs.registerOutParameter(1, java.sql.Types.DOUBLE);
                  cs.setInt(2, 25);
                  cs.registerOutParameter(3, java.sql.Types.VARCHAR);

Der Returnwert hat immer die Indexnummer 1 und ist immer ein OUT Parameter. Parameter 2 ist hier ein IN Parameter, Parameter drei wieder ein OUT Parameter.


INOUT Parameter müssen zuerst gesetzt und dann registriert werden
CallableStatement cs = conn.prepareCall( "{call procedure_name(?, ?)}" );
                  cs.setInt(1, 25);
                  cs.setString(2, "wzlbrmpft");
                  cs.registerOutParameter(2, java.sql.Types.VARCHAR);

Hier ist der erste Parameter ein IN Parameter und der zweite ein INOUT Parameter.


Aufruf der Prozedur bzw. Funktion

Nach dem Setzen und Registrieren wird die Prozedur (Funktion) durch einen execute() Aufruf abgearbeitet.

cs.execute();

Falls es OUT Parameter gegeben hat, werden diese nach execute() mit geeigneten get-Methoden abgeholt.

ResultSet rs = (ResultSet)cs.getObject(1);
int i = cs.getInt(3);

Hier handelte es sich entweder um eine Funktion, die ein ResultSet zurückgibt und als zweiten Parameter in der Parameterliste einen OUT Parameter vom Typ INTEGER hat, oder um eine Prozedur, die im ersten Parameter (OUT) der Liste ein ResultSet zurückgibt und im dritten Parameter (OUT) ein INTEGER.

Valid XHTML 1.0 Strict top Back Next Up Home