Anuncios en tutorial de programación PLSQL

miércoles, 19 de febrero de 2014

Sacar por pantalla los resultados de una consulta con DBMS_SQL.return_result (mejoras de Oracle 12c)

La nueva versión 12c de las bases de datos Oracle permite sacar por pantalla conjuntos de resultados de forma implícita. Esto es algo bastante útil si nos vemos en la tesitura de tener que migrar código escrito en SQL transaccional a código PL/SQL.

Procedimiento estándar DBMS_SQL.return_result

Para versiones anteriores de la base de datos Oracle, el PLSQL no soportaba la posibilidad de crear un procedimiento que simplemente volcase el contenido de una consulta SQL a la pantalla. Para conseguirlo, los desarrolladores de PL/SQL teníamos que escribir la consulta, recorrer con un bucle el conjunto de resultados devuelto por dicha consulta, y llamar en cada iteración al procedimiento estándar DBMS_OUTPUT.PUT_ LINE encargado de mostrar los datos en la pantalla.

En la versión 12c es ya posible devolver desde PL/SQL los resultados de una consulta SELECT directamente a la pantalla utilizando una simple llamada a un procedimiento estándar, lo que aparte de una ayuda importante a la hora de migrar código Transact-SQL a PLSQL, también es una gran ayuda a la hora de probar el código (ahora, por ejemplo, resulta súper sencillo escribir un procedimiento que muestre por pantalla todo el contenido de una tabla).

Para poder hacer este tipo de cosas, la versión 12c de las bases de datos Oracle ha incorporado una nueva funcionalidad al paquete estándar DBMS_SQL, en concreto podemos utilizar el nuevo procedimiento new DBMS_SQL.RETURN_RESULT. Lo más sencillo para comprender su funcionamiento es, como siempre, utilizar un ejemplo.
CREATE OR REPLACE PROCEDURE ver_clientes 
  (p_tipo_cliente IN clientes.tipo_cliente%TYPE)
IS
  l_cursor   sys_refcursor;
BEGIN
  OPEN l_cursor FOR
      SELECT   nombre_cliente
        FROM   clientes
       WHERE   tipo_cliente = p_tipo_cliente
    ORDER BY   nombre_cliente;

  DBMS_SQL.return_result (l_cursor);
END;
/

Y ahora cuando ejecutamos dicho procedimiento desde SQL*Plus, vemos una salida como la que sigue:
BEGIN
  ver_clientes ('NACIONALES');
END;
/

PL/SQL procedure successfully completed.

ResultSet #1
NOMBRE_CLIENTE
———————————————————————————————————
Centroblogs SLNE
Planchoneta SL
...

Esta nueva funcionalidad de la versión 12c también permite mostrar más de un conjunto de resultados desde un único procedimiento. Para hacer cosas como la indicada podemos utilizar el nuevo procedimiento DBMS_SQL.GET_NEXT_RESULT que permite seleccionar el siguiente cursor de resultados y volver a utilizar el procedimiento DBMS_SQL.RETURN_RESULT para mostrar los datos recientemente seleccionados. Si queréis más información al respecto os emplazo a que visitéis esta página oficial de Oracle.

0 comentarios: