Empleo de un procedimiento almacenado con un estado de retorno

Descargar controlador JDBC

Un procedimiento almacenado de SQL Server al que puede llamar es el que devuelve un parámetro de estado o resultado. Este estado se usa normalmente para indicar el funcionamiento correcto o incorrecto del procedimiento almacenado. El controlador JDBC de Microsoft para SQL Server ofrece la clase SQLServerCallableStatement, que puede usar para llamar a este tipo de procedimiento almacenado y procesar los datos que devuelve.

Al llamar a este tipo de procedimiento almacenado mediante el controlador JDBC, debe usar la secuencia de escape call de SQL junto con el método prepareCall de la clase SQLServerConnection. La sintaxis de la secuencia de escape call con un parámetro de estado de devolución es la siguiente:

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

Nota:

Para obtener más información sobre las secuencias de escape de SQL, consulte Usar secuencias de escape de SQL.

Al crear la secuencia de escape call, especifique el parámetro de estado de devolución mediante el carácter ?. Este carácter actúa como un marcador de posición para el valor del parámetro que devolverá el procedimiento almacenado. Para especificar un valor para un parámetro de estado de devolución, debe especificar el tipo de datos del parámetro mediante el método registerOutParameter de la clase SQLServerCallableStatement antes de ejecutar el procedimiento almacenado.

Nota:

Al usar el controlador JDBC con una base de datos de SQL Server, el valor especificado para el parámetro de estado de devolución del método registerOutParameter siempre es un entero, que se puede especificar mediante el tipo de datos java.sql.Types.INTEGER.

Además, al pasar un valor al método registerOutParameter para un parámetro de estado de devolución, debe especificar no solo el tipo de datos usado para el parámetro, sino también la posición ordinal del parámetro en la llamada al procedimiento almacenado. En el caso del parámetro de estado de devolución, su posición ordinal siempre es 1 debido a que es siempre el primer parámetro de la llamada al procedimiento almacenado. Aunque la clase SQLServerCallableStatement proporciona compatibilidad para usar el nombre del parámetro para indicar el parámetro concreto, puede usar el número de la posición ordinal de solo un parámetro para los parámetros de estado de devolución.

Cree, a modo de ejemplo, el siguiente procedimiento almacenado en la base de datos de ejemplo 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  

Este procedimiento almacenado devuelve un valor de estado de 1 ó 0 en función de si la ciudad especificada en el parámetro cityName se encuentra en la tabla Person.Address.

En el siguiente ejemplo, se pasa una conexión abierta a la base de datos de ejemplo AdventureWorks2022 a la función y se usa el método execute para llamar al procedimiento almacenado 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();
    }
}

Consulte también

Empleo de instrucciones con procedimientos almacenados