Anuncios en tutorial de programación PLSQL

miércoles, 14 de julio de 2021

Sacar por pantalla los resultados de una consulta con DBMS_SQL.return_result

Desde la salida de la versión 12c de las bases de datos Oracle, es posible 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 incorporó 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 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: