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