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