Saltar la navegación

4.2.1.- Ejemplos de utilización del paquete DBMS_OUTPUT.

Oracle nos suministra un paquete público con el cual podemos enviar mensajes desde subprogramas almacenados, paquetes y disparadores, colocarlos en un buffer y leerlos desde otros subprogramas almacenados, paquetes o disparadores.

SQL*Plus permite visualizar los mensajes que hay en el buffer, por medio del comando SET SERVEROUTPUT ON. La utilización fundamental de este paquete es para la depuración de nuestros subprogramas.

Veamos uno a uno los subprogramas que nos suministra este paquete:

  • Habilita las llamadas a los demás subprogramas. No es necesario cuando está activada la opción SERVEROUTPUT. Podemos pasarle un parámetro indicando el tamaño del buffer.
    ENABLE
    ENABLE( buffer_size IN INTEGER DEFAULT 2000);
    
    
  • Deshabilita las llamadas a los demás subprogramas y purga el buffer. Como con ENABLE no es necesario si estamos usando la opción SERVEROUTPUT.
    DISABLE
    DISABLE();
    
    
  • Coloca elementos en el buffer, los cuales son convertidos a VARCHAR2.
    PUT
    PUT(item IN NUMBER);
    PUT(item IN VARCHAR2);
    PUT(item IN DATE);
    
    
  • Coloca elementos en el buffer y los termina con un salto de línea.
    PUT_LINE
    PUT_LINE(item IN NUMBER);
    PUT_LINE(item IN VARCHAR2);
    PUT_LINE(item IN DATE);
    
    
  • Coloca un salto de línea en el buffer. Utilizado cuando componemos una línea usando varios PUT.
    NEW_LINE
    NEW_LINE();
    
    
  • Lee una línea del buffer colocándola en el parámetro line y obviando el salto de línea. El parámetro status devolverá 0 si nos hemos traído alguna línea y 1 en caso contrario.
    GET_LINE
    GET_LINE(line OUT VARCHAR2, status OUT VARCHAR2);
    
    
  • Intenta leer el número de líneas indicado en numlines. Una vez ejecutado, numlines contendrá el número de líneas que se ha traído. Las líneas traídas las coloca en el parámetro lines del tipo CHARARR, tipo definido el paquete DBMS_OUTPUT como una tabla de VARCHAR2(255).
    GET_LINES
    GET_LINES(lines OUT CHARARR, numlines IN OUT INTEGER);
    
    

Ejercicio resuelto

Debes crear un procedimiento que visualice todos los agentes, su nombre, nombre de la familia y/o nombre de la oficina a la que pertenece.