Share via


Verwenden von gespeicherten Prozeduren mit einem Rückgabestatus

JDBC-Treiber herunterladen

Bei einer aufrufbaren gespeicherten SQL Server-Prozedur handelt es sich um eine Prozedur, die einen Status- oder Ergebnisparameter zurückgibt. Mit diesem Status wird normalerweise ermittelt, ob die gespeicherte Prozedur erfolgreich oder fehlerhaft ausgeführt wurde. Der Microsoft-JDBC-Treiber für SQL Server stellt die Klasse SQLServerCallableStatement bereit, die Sie verwenden können, um diese Art gespeicherte Prozedur aufzurufen und die zurückgegebenen Daten zu verarbeiten.

Wenn Sie diese Art von gespeicherter Prozedur mit dem JDBC-Treiber aufrufen, müssen Sie die call-SQL-Escapesequenz zusammen mit der Methode prepareCall der Klasse SQLServerConnection verwenden. Die Syntax für die call-Escapesequenz mit einem Rückgabestatusparameter lautet wie folgt:

{[?=]call procedure-name[([parameter][,[parameter]]...)]}

Hinweis

Weitere Informationen zu SQL-Escapesequenzen finden Sie unter Verwenden von SQL-Escapesequenzen.

Wenn Sie die call-Escapesequenz erstellen, geben Sie den Rückgabestatusparameter mit dem Zeichen ? (Fragezeichen) an. das als Platzhalter für den Parameterwert fungiert, der von der gespeicherten Prozedur zurückgegeben wird. Um einen Wert für einen Rückgabestatusparameter anzugeben, müssen Sie vor dem Ausführen der gespeicherten Prozedur den Datentyp des Parameters mit der Methode registerOutParameter der Klasse „SQLServerCallableStatement“ angeben.

Hinweis

Wenn der JDBC-Treiber mit einer SQL Server-Datenbank verwendet wird, handelt es sich bei dem Wert, der in der Methode „registerOutParameter“ für den Rückgabestatusparameter angegeben wird, immer um einen Integer-Wert. Dies können Sie mit dem Datentyp java.sql.Types.INTEGER angeben.

Wenn Sie an die Methode „registerOutParameter“ einen Wert für einen Rückgabestatusparameter übergeben, müssen Sie darüber hinaus nicht nur den Datentyp für den Parameter angeben, sondern auch die ordinale Position des Parameters im Aufruf der gespeicherten Prozedur. Für den Rückgabestatusparameter ist die ordinale Position immer 1, da es sich immer um den ersten Parameter im Aufruf der gespeicherten Prozedur handelt. Obwohl die Klasse „SQLServerCallableStatement“ die Verwendung des Namens eines Parameters zum Angeben dieses Parameters unterstützt, können Sie für Rückgabestatusparameter nur die Ordnungspositionsnummer verwenden.

Erstellen Sie als Beispiel die folgende gespeicherte Prozedur in der AdventureWorks2022-Beispieldatenbank:

CREATE PROCEDURE CheckContactCity  
   (@cityName CHAR(50))  
AS  
BEGIN  
   IF ((SELECT COUNT(*)  
   FROM Person.Address  
   WHERE City = @cityName) > 1)  
   RETURN 1  
ELSE  
   RETURN 0  
END  

Diese gespeicherte Prozedur gibt abhängig davon, ob der im cityName-Parameter angegebene Ort in der Person.Address-Tabelle gefunden wurde, den Statuswert 1 oder 0 zurück.

Im folgenden Beispiel wird eine offene Verbindung mit der AdventureWorks2022-Beispieldatenbank an die Funktion übergeben. Anschließend wird mit der Methode execute die gespeicherte Prozedur „CheckContactCity“ aufgerufen:

public static void executeStoredProcedure(Connection con) {
    try(CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");) {
        cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
        cstmt.setString(2, "Atlanta");
        cstmt.execute();
        System.out.println("RETURN STATUS: " + cstmt.getInt(1));
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

Siehe auch

Verwenden von Anweisungen mit gespeicherten Prozeduren