miércoles, 22 de marzo de 2023

Llamar desde JDBC a procedimientos Oracle que retornan cursores implícitos

 Hola estimados tecnólogos.

A pedido de uno de los lectores del blog publico este post para ejemplificar como llamar a los procedimientos PL/SQL que retornan cursores implícitos(funcionalidad disponible desde Oracle Databaee 11g).

Para empezar, empleando SQL*PLUS se establecerá una conexión con el esquema HR instalado en la pdb de nombre XEPDB1 de la versión gratuita XE(18c,21c) de Oracle Database.

conn hr/clavehr@localhost:1521/xepdb1

Submitir el siguiente fragmento de código:

create or replace procedure select_multiples_resultados as
 rf_cursor_departments SYS_REFCURSOR;
 rf_cursor_employees SYS_REFCURSOR;
begin
  open rf_cursor_departments for
     SELECT
         department_id,department_name
     FROM HR.departments
     ORDER BY department_name;

    dbms_sql.return_result(rf_cursor_departments);

  open rf_cursor_employees for
    SELECT employee_id,first_name,last_name,salary,email,phone_number
    FROM HR.employees
    ORDER BY last_name,first_name;

    dbms_sql.return_result(rf_cursor_employees);

end select_multiples_resultados;

Salida>> procedimiento creado

Crear una aplicación en NetBeans.

Agregar el paquete ojdbc7.jar

Llamar al procedimiento select_employees desde un bloque PL/SQL.

public static void probarCursoresImplicitos(Connection pconn){
        String sql = "begin select_multiples_resultados; end;";

        Connection conn = pconn;
        try {
            Statement stmt = conn.createStatement ();
            stmt.executeQuery (sql);

            while (stmt.getMoreResults())
            {
                ResultSet rs = stmt.getResultSet();
                System.out.println("ResultSet");
                while (rs.next())
                {
                  /* get results */
                  System.out.println(rs.getString(2));
                }
                System.out.println("\n\n");
                System.out.println("Otros resultados");
            }
        }catch(SQLException sQLException ){
            System.out.println(sQLException.getMessage());
        }
    }

Crear el código para conectarse a Oracle Database XE usando JDBC.

 try {
            try {
                // TODO code application logic here
                Class.forName("oracle.jdbc.driver.OracleDriver");
            }catch(ClassNotFoundException ex){

           }
   

      String url="jdbc:oracle:thin:@127.0.0.1:1521/XEPDB1";
      Connection conn=DriverManager.getConnection(url, "hr","hr");
            
      JOptionPane.showMessageDialog(null, "Conectado a XE");
     ConexionBD.probarCursoresImplicitos(conn);
            
 } catch (SQLException ex) {
    Logger.getLogger(JavaApplicationProbarCursoresImplicitos.class.getName()).log(Level.SEVERE, null, ex);

}

Se ejecuta la aplicación y se observan los resultados como se aprecia en la imagen siguiente.

 

Espero que este ejemplo sea de utilidad para todos.

Roberto Párraga Zambrano

Cordiales.

 

Entrada destacada

Cómo instalar Oracle Database 18c Express Edition para Windows

Oracle Database 18c XE ya está disponible para Windows 64bit, en este post se enseñará como instalar y configurar esta nueva versión en W...