Uso di una stored procedure con stato restituito

Scaricare il driver JDBC

Una stored procedure di SQL Server che è possibile chiamare è quella che restituisce uno stato o un parametro di risultato. Questo stato in genere viene usato per indicare l'esito positivo o negativo della stored procedure. Microsoft JDBC Driver per SQL Server fornisce la classe SQLServerCallableStatement che è possibile usare per chiamare questo tipo di stored procedure ed elaborare i dati restituiti.

Quando si chiama questo tipo di stored procedure usando il driver JDBC, è necessario usare la sequenza di escape SQL call insieme al metodo prepareCall della classe SQLServerConnection. La sintassi della sequenza di escape call con parametro con stato restituito è la seguente:

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

Nota

Per altre informazioni sulle sequenze di escape SQL, vedere Uso delle sequenze di escape SQL.

Quando si crea la sequenza di escape call, specificare il parametro return status usando il carattere ? (punto interrogativo). che funge da segnaposto per il valore di parametro che verrà restituito dalla stored procedure. Per specificare il valore di un parametro return status, è necessario specificare il tipo di dati del parametro usando il metodo registerOutParameter della classe SQLServerCallableStatement prima di eseguire la stored procedure.

Nota

Quando si usa il driver JDBC con database di SQL Server, il valore specificato per il parametro return status nel metodo registerOutParameter sarà sempre un valore integer che è possibile specificare usando il tipo di dati java.sql.Types.INTEGER.

Inoltre, quando si passa un valore al metodo registerOutParameter per un parametro return status, è necessario specificare non solo il tipo di dati da usare per il parametro, ma anche la posizione ordinale del parametro nella stored procedure. Nel caso del parametro return status, la posizione ordinale sarà sempre 1 perché si tratta sempre del primo parametro nella chiamata alla stored procedure. Sebbene la classe SQLServerCallableStatement fornisca il supporto per l'utilizzo del nome del parametro per indicare il parametro specifico, per i parametri return status è possibile usare solo il numero della posizione ordinale.

Ad esempio, creare la seguente stored procedure nel database di esempio AdventureWorks2022:

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

Questa stored procedure restituisce un valore di stato uguale a 1 o 0, in base alla presenza o meno nella tabella Person.Address della città specificata nel parametro cityName.

Nell'esempio seguente viene passata alla funzione una connessione aperta al database di esempio AdventureWorks2022 e viene usato il metodo execute per chiamare la stored procedure CheckContactCity:

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();
    }
}

Vedi anche

Uso delle istruzioni con le stored procedure