Páginas

16/6/15

CallableStatement con parámetros IN/OUT desde java.

CallableStatement con parámetros IN/OUT desde java.

Como ejecutar una consulta a Oracle PL/SQL con un parámetro IN/OUT desde CallableStatement Java.




Cuando trabajamos en Java con una base de datos Oracle PL/SQL sabemos que siempre en el DAO hacemos la llamada a un Strored Procedure y dependiendo de sus parámetros pasamos el valor correcto. Suponiendo que el Stored Procedure sea declarado en Oracle de esta manera:
  PROCEDURE SP_BUSCAR_USUARIO(NUMERO_DOCUMENTO IN NUMBER,
                              CODIGO_MENSAJE   OUT NUMBER,
                              MENSAJE          OUT VARCHAR2);
  
Ya sabemos que este SP tiene parámetros de entrada (IN) y de salida (OUT), para ejecutar este SP desde Java tenemos que hacer esto:
  CallableStatement callableStatement = null;
  Connection connection = null;
  ResultSet resultSet = null;

  String mensajeDevuelto = "";
  int codigoMensaje = 0;
  String sql = "{ CALL  PAQUETE_DATO_JAVA.SP_BUSCAR_USUARIO(?,?,?) }";
  try {
   connection = Control.getConnection();

   callableStatement = connection.prepareCall(sql.toString());
   callableStatement.setInt(1, numeroDocumento);
   callableStatement.registerOutParameter(2, OracleTypes.INTEGER);
   callableStatement.registerOutParameter(3, OracleTypes.VARCHAR);
   
   callableStatement.execute();
   
   codigoMensaje = callableStatement.getInt(2);
   mensaje = callableStatement.getString(3);

   //......
  
Como vemos anteriormente cuando un SP recibe parámetros de entrada (IN) en Java nosotros seteamos el parámetro en el CallableStatement, y si el SP recibe parámetros de salida (OUT) nosotros en Java registramos el tipo de parámetro de salida en el CallableStatement y después procedemos a insertarlo en una variable. Ahora lo que puede enredarnos es como hacer cuando un SP recibe un parámetro de entrada y salida (IN OUT), es sencillo eso lo hacemos así, suponiendo que esta sea la declaración del SP:
  PROCEDURE SP_BUSCAR_USUARIO(NUMERO_DOCUMENTO IN NUMBER,
                              CODIGO_MENSAJE   IN OUT NUMBER,
                              MENSAJE          OUT VARCHAR2);
  
Así lo ejecutamos desde Java:
  CallableStatement callableStatement = null;
  Connection connection = null;
  ResultSet resultSet = null;

  String mensajeDevuelto = "";
  int codigoMensaje = 0;
  String sql = "{ CALL  PAQUETE_DATO_JAVA.SP_BUSCAR_USUARIO(?,?,?) }";
  try {
   connection = Control.getConnection();

   callableStatement = connection.prepareCall(sql.toString());
   callableStatement.setInt(1, numeroDocumento);
   callableStatement.setInt(2, codigoMensaje);
   callableStatement.registerOutParameter(2, OracleTypes.INTEGER);
   callableStatement.registerOutParameter(3, OracleTypes.VARCHAR);
   
   callableStatement.execute();
   
   codigoMensaje = callableStatement.getInt(2);
   mensaje = callableStatement.getString(3);

   //......
  
Para que eso funcione primero tenemos que setear en el parámetro de entrada en el CallableStatement y después registrar el tipo de parámetro de salida en el mismo índice. Suerte, espero te sirva este Dato Java.

No hay comentarios :

Publicar un comentario