informes sql plus
TRANSCRIPT
Introducción
El uso más común de SQL*Plus es realizar consultas y obtener informes.
No obstante, los datos obtenidos en las consultas se pueden presentar de forma más elegante.
En esta unidad se explica como utilizar SQL*Plus para crear listados formateados, controlando los títulos del listado, las cabeceras de las columnas, las líneas de totales y subtotales, etc.
La salida formateada de una consulta se puede guardar en un fichero para ejecutarlo que vez que se necesite consultar el listado.
Uso del editor para crear archivos SQL
Para guardar las órdenes en un archivo hay que teclear la orden EDIT seguida de la ruta y el nombre del archivo en el que se almacenarán esas órdenes.
SQL> EDIT RUTA\NOMBRE_ARCHIVO
Con EDIT se invoca el editor (por defecto, el bloc de notas: NOTEPAD.EXE)
Si no existe el archivo, nos preguntará si queremos crearlo y pulsamos SI.
Órdenes para generar informes
Orden Función
REMARK Incluir comentarios
SET HEADSEP Dividir un título en dos o más líneas
TTITLE Título superior de cada página
BTITLE Título inferior de cada página
COLUMN Dar formato al campo (columna )
BREAK ON Ruptura de control, calcular totales y subtotales
COMPUTE Cálculos con grupos de registros (filas)
SET LINESIZE Número máximo de caracteres por línea
SET PAGESIZE Número máximo de líneas por página
SET NEWPAGE Número de líneas en blanco entre páginas
SPOOL Guarda la salida del informe en un archivo
Órdenes para generar informes
Orden REMARK (REM)
Permite añadir comentarios.
Se puede colocar en cualquier parte del listado.
REM Nombre: LISTADO.SQL
REM Descripción: Informe de ventas
Órdenes para generar informes
Orden SET. Configuración de las variables del entorno SQL*Plus
Permite consultar y cambiar el valor de las variables del entorno SQL*Plus.
Para dar valor a las variables se utiliza SET:
SET variable valor
Para visualizar su valor utilizamos SHOW:
SHOW variable
Órdenes para generar informes
Orden SET. Configuración de las variables del entorno SQL*Plus
En el listado se usan las variables HEADSEP, LINESIZE, PAGESIZE y NEWPAGE. SET HEADSEP |. El símbolo que se coloca a la
derecha de SET HEADSEP es el carácter que se usará para dividir un título en dos o más líneas.
SET LINESIZE. Con esta orden se define el número máximo de caracteres que pueden aparecer en una línea. Por ejemplo, definir 50 caracteres por línea:
SET LINESIZE 50
Órdenes para generar informes
Orden SET. Configuración de las variables del entorno SQL*Plus
SET PAGESIZE. Con esta orden se define el número de líneas por cada página, incluyendo TTITLE y BTITLE, las cabeceras de los campos y cualquier línea en blanco. Generalmente este número es 66. Por ejemplo, definir 50 líneas por página:
SET PAGESIZE 50
Órdenes para generar informes
Orden SET. Configuración de las variables del entorno SQL*Plus
SET NEWPAGE. Esta orden imprime líneas en blanco antes de la línea superior de cada página del informe, donde está la fecha y el número de página.
Por ejemplo, definir un informe que comience con 10 líneas en blanco seguidas de 50 líneas de información:
SET PAGESIZE 60
SET NEWPAGE 10
Órdenes para generar informes
Orden SET. Configuración de las variables del entorno SQL*Plus
SET TERMOUT OFF y SET TERMOUT ON. Cuando se ejecuta el listado con la orden START, éste aparece en pantalla.
Con SET TERMOUT OFF se evita que los datos aparezcan en la pantalla. Se suele usar antes de la orden SPOOL.
Con SET TERMOUT ON los datos aparecerán en pantalla. Esta opción se suele utilizar después de la orden SPOOL.
Órdenes para generar informes
Orden SET. Configuración de las variables del entorno SQL*Plus
SET SQLCASE UPPER. Esta orden indica a SQL*Plus que convierta el texto introducido por teclado (con la orden ACCEPT) a mayúsculas.
SET PAUSE ON. Permite controlar el desplazamiento entre pantallas pulsando la tecla Intro.
Se puede mostrar un texto: SET PAUSE ‘texto’.
Se desactiva mediante: SET PAUSE OFF.
Órdenes para generar informes
Órdenes TTILTE y BTITLE. Encabezados y pies de página
Con estas órdenes podemos títulos en la parte superior e inferior de cada página del informe.
Por defecto, el título aparece centrado, teniendo en cuenta el tamaño de la línea definido con LINESIZE.
Podemos cambiar la alineación del título mediante las cláusulas LEFT, RIGHT y CENTER.
TTITLE CENTER „Listado empleados‟
BTITLE RIGHT „Por departamento‟
Órdenes para generar informes
Órdenes TTILTE y BTITLE
Para que aparezcan una o dos líneas en blanco después del título se usa la orden SKIP n+1, donde n es el número de líneas que se van a saltar.
Por ejemplo, para saltar una línea después de escribir el título:
TTITLE CENTER „Listado empleados‟
SKIP 2
Órdenes para generar informes
Órdenes TTILTE y BTITLE
Cuando se obtiene un informe aparece en la primera línea del listado la fecha y el nº de página, si se usa SKIP, esta primera línea no aparecerá.
Órdenes para generar informes
Órdenes TTILTE y BTITLE
Para que los títulos no vuelvan a aparecer al realizar una consulta, se deben anular de esta forma:
SQL> TTITLE OFF
SQL> BTITLE OFF
Para que vuelvan a aparecer, se activan así:
SQL> TTITLE ON
SQL> BTITLE ON
Órdenes para generar informes
Órdenes TTILTE y BTITLE
Se puede incluir una serie de variables con información del sistema en las órdenes TTITLE y BTITLE.
SQL.LNO: devuelve el nº de línea actual.
SQL.RELEASE: devuelve la versión de Oracle.
SQL.PNO: devuelve el nº de página actual.
SQL.USER: devuelve el nombre de usuario actual.
Órdenes para generar informes
Órdenes TTILTE y BTITLE
Por ejemplo:
SQL> TTITLE LEFT „APELLIDO EMPLEADOS‟-
CENTER „Usuario: „ SQL.USER SKIP 1-
LEFT „Página:‟ FORMAT 999 SQL.PNO
Se creará el siguiente título superior:
APELLIDO EMPLEADOS Usuario: SCOTT
Página:1
El guión (-) se usa para indicar que la orden TTITLE continúa en la siguiente línea.
Órdenes para generar informes
Órdenes TTILTE y BTITLE
Cualquier consulta que se realice a partir de ahora se mostrará visualizando previamente el título que se ha definido como cabecera del listado.
SQL> SELECT APELLIDO FROM EMPLEADO;
APELLIDO EMPLEADOS Usuario: SCOTT
Página:1
APELLIDO
-------------------
CEREZO
REY
MUÑOZ
Órdenes para generar informes
Orden COLUMN. Formato de columnas
Esta orden formatea el contenido de las columnas y sus cabeceras.
COLUMN NOMBRE_CAMPO FORMATO
Formatos:
HEADING: Define la cabecera del campo.
COLUMN VENTAS HEADING „Artículo|Vendido‟
El texto que aparece a la derecha de HEADINGD es la nueva cabecera del campo que, además, usa el carácter separador “|” para indicar que la cabecera del campo aparecerá en dos líneas.
Órdenes para generar informes
Orden COLUMN. Formato de columnas
Formatos:
FORMAT: Define el formato para el contenido del campo.
COLUMN VENTAS FORMAT A15
La A indica que se da formato a una columna de tipo Alfanumérico, y el número que sigue a continuación representa la cantidad de caracteres.
Si la longitud del campo VENTAS es mayor de 15, aparecerá dividida en dos líneas.
Órdenes para generar informes
Orden COLUMN. Formato de columnas
Formatos: FORMAT:
COLUMN TOTAL FORMAT 9G999D00
Define la columna numérica para espacio para 4 dígitos, 2 decimales, el punto de los miles y la coma de los decimales.
Si la columna TOTAL tiene más de 4 dígitos en alguna fila, aparecerán caracteres #.
Órdenes para generar informes
Orden COLUMN. Formato de columnas
Formatos:
Formatos para FORMAT
An Establece el ancho de columna en número de caracteres
9 Dígitos con supresión de ceros
0 Dígitos dejando los ceros
$ Símbolo de dólar $
L Moneda local
. ó D Posición del punto decimal
, ó G Separador de miles
| Inserta un salto de línea
Órdenes para generar informes
Orden COLUMN. Formato de columnas
Formatos:
TRUNCATED: Trunca el contenido de un campo.
COLUMN VENTAS FORMAT A15 TRUNCATED
Sólo mostrará los primeros 15 caracteres del campo VENTAS.
Si la longitud del campo VENTAS es mayor de 15, los caracteres a partir de esa posición no aparecerán.
Órdenes para generar informes
Orden COLUMN. Formato de columnas
Formatos:
CLEAR: Borra el formato dado a un campo.
COLUMN VENTAS CLEAR
Si se desean borrar todos los formatos definidos para los campos usaremos la orden CLEAR COLUMNS.
Órdenes para generar informes
Orden BREAK ON. Ruptura de control
Esta orden produce una ruptura de control por la columna que se desee.
Esta sentencia hace rupturas en el SELECT de una tabla según los valores de un campo de dicha tabla.
Es muy útil en el caso de querer dividir en pequeñas tablas una tabla según el valor que tenga una columna.
Órdenes para generar informes
Orden BREAK ON. Ruptura de control
BREAK ON DESCRIPCION SKIP 2
En este ejemplo el campo DESCRIPCION sólo se mostrará una vez, en lugar de aparecer fila a fila.
Cuando cambie la descripción, se hará un salto de 2 líneas, especificado en la cláusula SKIP.
La orden BREAK ON necesita la cláusula ORDER BY de la sentencia SELECT para que la salida del listado sea la deseada.
Órdenes para generar informes
Orden BREAK ON. Ruptura de control
Si añadimos la cláusula DUPLICATE aparecerá el campo DESCRIPCION en todas las líneas.
BREAK ON DESCRIPCION DUPLICATE SKIP 2
Todas las rupturas de control definidas se pueden eliminar con CLEAR BREAKS.
Sólo puede haber una orden BREAK activa, por lo que si se especifican varias rupturas, han de especificarse todas en una sola orden.
Órdenes para generar informes
Orden COMPUTE. Cálculos
Con esta orden se hacen cálculos con grupos de filas seleccionados.
COMPUTE {SUM,AVG,COUNT,MAX,MIN,STD,VAR,NUM}
OF {expresión|campo}
ON {expresión|campo}
Órdenes para generar informes
Orden COMPUTE. Cálculos Opciones:
SUM Calcula la suma
AVG Calcula la media
COUNT Cuenta las filas no nulas
MAX Calcula el valor máximo
MIN Calcula el valor mínimo
STD Calcula la desviación estándar
VAR Calcula la varianza
NUM Cuenta todas la filas (incluidas las no nulas)
Órdenes para generar informes
Orden COMPUTE. Cálculos OF {expresión|campo}: campo o expresión sobre
la que se realizan los cálculos.
ON {expresión|row|page|report}: indica sobre qué punto de BREAK se introduce el cálculo: expresión: cuando cambia el valor de expresión.
row: en cada cambio de registro (fila).
page: en cada final de página.
report: al final de un informe o consulta.
Órdenes para generar informes
Orden COMPUTE. Cálculos
Los totales que calcula COMPUTE son los especificados en la sección indicada por BREAK ON.
No se puede usar COMPUTE sin BREAK ON.
BREAK ON DESCRIPCION SKIP 2
COMPUTE SUM OF VENTAS ON DESCRIPCION
COMPUTE SUM OF IMPORTE ON DESCRIPCION
Órdenes para generar informes
Orden COMPUTE. Cálculos
Para saber en cualquier momento cuales son los BREAK y COMPUTE activos, basta teclear:
SQL> BREAK
break on report nodup on ventas nodup
SQL> COMPUTE
COMPUTE SUM LABEL „sum‟ OF IMPORTE ON DESCRIPCION
COMPUTE SUM LABEL „sum‟ OF VENTAS ON REPORT
COMPUTE SUM LABEL „sum‟ OF VENTAS ON DESCRIPCION
Órdenes para generar informes
Orden COMPUTE. Cálculos
Se puede cambiar la palabra ‘sum’ que aparece en el informe indicando las sumas, con la cláusula LABEL:
COMPUTE SUM LABEL „TOTAL VENTAS‟ OF VENTAS ON REPORT
Para eliminar los puntos de ruptura, los cálculos o las definiciones de campos se usa CLEAR:
SQL>CLEAR BREAKS SQL>CLEAR COMPUTES SQL>CLEAR COLUMNS
breaks limpiado computes limpiado columns limpiado
Órdenes para generar informes
Orden SPOOL
Esta orden posibilita guardar en un archivo toda la salida que SQL*Plus vaya produciendo por pantalla.
SQL> SPOOL RUTA\NOMBRE_ARCHIVO
Para que pare usaremos la orden SPOOL OFF.
SPOOL C:\reports\listado.lst
SELECT * FROM EMPLEADO;
SPOOL OFF
Órdenes para generar informes
Definición y uso de variables. DEFINE Y ACCEPT
Con SQL*Plus podemos definir variables con la orden DEFINE, para usarlas después en un informe.
SQL> DEFINE CABECERA=“VENTAS TOTALES”
SQL> DEFINE RAYA=“==============”
SQL> DEFINE PIE=“Solo Mayo 2009”
Para ver la lista de variables definidas se teclea DEFINE desde el indicador SQL*Plus:
SQL> DEFINE
Órdenes para generar informes
Definición y uso de variables. DEFINE Y ACCEPT
Podemos usar las variables definidas en el listado:
TTITLE CENTER CABECERA SKIP 1 CENTER RAYA
BTITLE LEFT PIE
Para eliminar las variables definidas usaremos la orden UNDEFINE seguida del nombre de la variable.
SQL> UNDEFINE CABECERA
Órdenes para generar informes
Definición y uso de variables. DEFINE Y ACCEPT
También es posible diseñar un listado que pida introducir cierta información por teclado, como por ejemplo el nº de departamento que se va a listar.
La introducción de valores se realiza con ACCEPT.
ACCEPT variable [TIPO DE DATO]
[FORMAT formato]
[PROMPT „texto‟|NOPROMPT]
[HIDE]
Órdenes para generar informes
Definición y uso de variables. DEFINE Y ACCEPT variable es el nombre de la variable que recibe la
información tecleada.
TIPO DE DATO determina el tipo de dato de la variable, por defecto es char.
Si se teclea un dato que no corresponde con el tipo especificado se produce un mensaje de error y vuelve a pedir la entrada.
FORMAT formato define el formato para el contenido de la variable.
Órdenes para generar informes
Definición y uso de variables. DEFINE Y ACCEPT PROMPT „texto‟ muestra el texto al usuario antes de
teclear los datos.
NOPROMPT salta una línea y espera la entrada.
HIDE es útil para contraseñas, al escribir el dato se visualizarán asteriscos.
Órdenes para generar informes
Definición y uso de variables. DEFINE Y ACCEPT
PROMPT „Proporcione los siguientes datos‟
ACCEPT nom_usuario char DEFAULT „invitado‟
PROMPT „Usuario:‟
ACCEPT pwd char PROMPT „contraseña:' HIDE
ACCEPT num_emp number FORMAT '99999'
PROMPT 'Número de empleado:'
ACCEPT fecha_inf date FORMAT 'yyyy/mm/dd'
PROMPT 'Fecha de informe:'
Órdenes para generar informes
Definición y uso de variables. DEFINE Y ACCEPT
Al usar variables en una consulta SELECT, el nombre de la variable debe llevar un ampersand (&) delante.
Si la variable se define como CHAR debe ir encerrada entre comillas simples.
SQL> SELECT * FROM EMPLEADO
WHERE N_EMPLEADO = &num_emp AND
USUARIO = „&nom_usuario‟;
Órdenes para generar informes
Definición y uso de variables. DEFINE Y ACCEPT
Cuando se usa la orden ACCEPT para introducir datos por teclado, la variable queda definida y podremos verla con DEFINE.
Existe la posibilidad de usar el ampersand como prefijo delante de una variable que no esté definida, en este caso se interpreta la entrada de teclado pero no se almacena su valor.
SQL> SELECT * FROM EMPLEADO WHERE DPTO = &NUMDPTO;
Donde NUMDPTO no esta definida previamente.