Usar un procedimiento almacenado con un estado de devolución

Un procedimiento almacenado de SQL Server al que puede llamar es el que devuelve un parámetro de estado o resultado. Se usa normalmente para indicar el funcionamiento correcto o incorrecto del procedimiento almacenado. El controlador JDBC de Microsoft SQL Server 2005 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 para 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 acerca de las secuencias de escape de SQL, consulte Usar secuencias de escape SQL.

Al crear la secuencia de escape call, especifique el parámetro de estado de devolución mediante el carácter ? (signo de interrogación). 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 sólo los tipos de datos usados 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 la compatibilidad para utilizar el nombre del parámetro para indicar el parámetro concreto, puede utilizar el número de la posición ordinal de sólo un parámetro para los parámetros de estado de retorno.

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

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 AdventureWorks 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));
   }
   cstmt.close();
   catch (Exception e) {
      e.printStackTrace();
   }
}

Vea también

Otros recursos

Usar instrucciones con procedimientos almacenados