Blog de Programación y Diseño Web

Crear Procedimiento Almacenado en DB2 con parametros de salida y resultset, luego consumirlo desde Java.

Escrito en General by Andres on the Agosto 31st, 2009

No soy un partidario de utilizar Procedimientos Almacenados (Stored Procedures), pero cuando se trabaja con empresas externas, aunque duela, hay que aprender.

Actualmente en el proyecto que estoy trabajando debia crear un procedimiento almacenado “dummy” en DB2 que retornara un parametro de salida y adicionalmente un resultset, esto me pareció bastante curioso ya que los SP no estan concebidos para eso. De todas maneras esto se puede hacer y leyendo la documentación de IBM DB2 encontré la respuesta.

Crear el procedimiento

Para poder retornar un resultset, primero debemos tener una tabla y en este caso le llamaremos “MITABLA”. Luego crearemos un procedimiento almacenado que devuelva un parametro de salida y el resultset.

El código del procedimiento

Aquí la clave es declarar el cursor con “with return”

CREATE PROCEDURE "MIESQUEMA".SP_CON_RESULTSET(
    OUT CODIGO varchar(20))
  LANGUAGE SQL
  DYNAMIC RESULT SETS 1
BEGIN
    --DECLARAMOS EL CURSOR PARA EL RESULTSET
    DECLARE C1 CURSOR WITH RETURN FOR SELECT * FROM MITABLA;
    --SETEAMOS EL PARAMETRO DE SALIDA
    SET CODIGO = '1313';
    OPEN C1;
    RETURN;
END

Consumir SP desde Java

Hay dos formas de obtener el resultset, la primera es utilizar el método executeQuery() que retorna el resultset y la segunda es la mencionada a continuación, utilizar execute() y luego getResultSet()

public void callSP(){
    ResultSet result = null;
    CallableStatement cstmt = null;
    try {
        String procName = "MIESQUEMA.SP_CON_RESULTSET";
        //concatenamos
        String sql_ = "CALL " + procName + "(?)";
        cstmt = con.prepareCall(sql_);
        //Registramos el parametro de salida y el tipo de dato
        cstmt.registerOutParameter( 1, Types.CHAR);
        //Realizando la llamada
        cstmt.execute();
        //Obtenemos el parametro de salida
        String codigoSalida = cstmt.getString(1);
        //Obtenemos el resultset
        result = (ResultSet) cstmt.getResultSet();

        while (result.next()) {
            //Aquí iteramos sobre el resultset
        }
    } catch (SQLException e) {
    //En caso de un excepción
    }
}

One Response to 'Crear Procedimiento Almacenado en DB2 con parametros de salida y resultset, luego consumirlo desde Java.'

Subscribe to comments with RSS or TrackBack to 'Crear Procedimiento Almacenado en DB2 con parametros de salida y resultset, luego consumirlo desde Java.'.

  1. Andres said, on Enero 4th, 2010 at 21:30

    ¿Que diferencia hay entre hacer esto
    instruccion.registerOutParameter(1,java.sql.Types.INTEGER);
    y esto otro
    instruccion.registerOutParameter(1,OracleTypes.INTEGER );
    ?

Dejame tu comentario

Switch to our mobile site