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.

 

No hay comentarios.:

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...