Hola.

En este post  encontrarás cómo llamar un procedimiento almacenado hecho en PL/SQL.

Cuando se desarrollan aplicaciones empresariales es muy común que la lógica de negocio se encuentre desarrollada en pl/sql, es una buena estrategia lanzar excepciones cuando se encuentra un error de lógica de negocio en el procedimiento almacenado.

Dicha execption debe enviar el mensaje de error para que este sea capturado en Java y tratada en el componente que hace el llamado al procedimiento almacenado.

En una aplicación web se debería mostrar el mensaje de la excepción lanzada por el componente de lógica de negocio desarrollado en pl/sql. Código del procedimiento almacenado en pl/sql. Este procedimiento lanza una exception si se envía un valor numérico diferente de 1,  la exception puede ser tratada en el bloque de código catch en Java.

create or replace Procedure ProGetPrueba1(prfCursor out Sys_Refcursor,pnNumber  In Number)  Is
   voCursor  Sys_Refcursor:=null;
 Begin
      --Valor 1: funciona OK, Valor diferente a 1 retorna error.
      if  pnNumber = 1 then
              Open voCursor For
              Select 1 as CODIGO,'Vortexbird' as NOMBRE
              From   DUAL;
              prfCursor:=voCursor;
      else
           RAISE_APPLICATION_ERROR (-20000, 'El valor no puede ser negativo'); --voCursor;
      end if;
 End ProGetPrueba1;

Código Java para hacer el llamado al procedimiento almacenado.

package com.vortexbird.demo.test;
  
import java.sql.CallableStatement;
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException;  
import oracle.jdbc.OracleTypes;  

/**  * @author dgomez@vortexbird.com
  */ 
public class TestStore {
  	public static void main(String[] args) {
  		String url="jdbc:oracle:thin:@127.0.0.1:1521:xe";
 		String user="banco";
 		String password="banco";
  			try {
 				Class.forName("oracle.jdbc.driver.OracleDriver");
 				Connection connection=DriverManager.getConnection(url,user,password);

 				//LLamado del procedimiento al estilo pl/sql
 				String sql="begin ProGetPrueba1(?,?); end;";
  				CallableStatement callableStatement=connection.prepareCall(sql);

  				//Parametros de entrada
 				callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
 				callableStatement.setLong(2, 1L);
  				callableStatement.execute();

 				//Se obtiene el cursor en forma de ResultSe 
				ResultSet rs = (ResultSet)callableStatement.getObject(1);
 				while (rs.next()){
 					System.out.println(rs.getLong("CODIGO"));
 					System.out.println(rs.getString("NOMBRE"));
 				} 				rs.close();
 				callableStatement.close();
 				connection.close();
 			} catch (ClassNotFoundException e) {
 				e.printStackTrace();
 			} catch (SQLException e) {
 				//Imprime el mensaje de la exception lanzada en pl/sql si el valor es diferente de 1
 				e.printStackTrace();
 			}
 	}
 }

Es todo, de esta forma se llama un procedimiento almacenado en escrito en pl/sql desde Java usando JDBC.

No hay comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *