Utilizzo di una stored procedure con stato restituito

Una stored procedure di SQL Server che è possibile chiamare restituisce un parametro di stato o risultato che in genere viene utilizzato per indicare l'esito positivo o negativo della stored procedure. Il driver JDBC Microsoft SQL Server 2005 fornisce la classe SQLServerCallableStatement che è possibile utilizzare per chiamare questo tipo di stored procedure ed elaborare i dati restituiti.

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

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

Nota

Per ulteriori informazioni sulle sequenze di escape SQL, vedere Utilizzo delle sequenze di escape SQL.

Quando si costruisce la sequenza escape call, specificare il parametro return status utilizzando 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 utilizzando il metodo registerOutParameter della classe SQLServerCallableStatement prima di eseguire la stored procedure.

Nota

Quando si utilizza 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 utilizzando 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 utilizzare 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 utilizzare solo il numero della posizione ordinale.

Come esempio, viene creata la seguente stored procedure nel database di esempio AdventureWorks di SQL Server 2005:

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 AdventureWorks e il metodo execute viene utilizzato per la chiamata alla 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));
   }
   cstmt.close();
   catch (Exception e) {
      e.printStackTrace();
   }
}

Vedere anche

Altre risorse

Utilizzo delle istruzioni con le stored procedure