Oracle básico (y VI): SQLMenu
SQLMenu es el producto de ORACLE
destinado a producir árboles de menúes que permiten al usuario desplazarse fácilmente
a través de su aplicación, facilitando a su vez, la integración con los
diferentes módulos de ORACLE
analizados en nuestros artículos anteriores permitiendo, de esta forma, la
conexión con SQLForms, SQLReport, SQLPlus, PL/SQL
y tareas del sistema operativo.
La
integración de módulos, herramienta que permite desde un producto de Oracle
invocar otros, también está presente en SQLForms,
desde donde, como veremos en este artículo, se pueden realizar tareas del
sistema operativo con llamadas a los módulos SQLReport y SQLPlus.
Definiciones
Comenzaremos
explicando las diferentes partes que componen el diseño de un menú en SQLMenu.
Ellos son:
Aplicación Conjunto de uno o más menúes interconectados para realizar las tareas necesarias del sistema y para el cual se definen su nombre, nombre del archivo ejecutable, fecha de creación, nombre del usuario, número de la versión, fecha de la última modificación, directorio de ubicación y su identificación.
Menú
Lista de opciones o items que realizan las tareas específicas del
sistema. Cuando se crea la aplicación el primer menú que se debe definir es el
principal, cuyo nombre tiene que ser el mismo que el de la aplicación. Este será
el menú que se activará en forma automática al cargar la aplicación.
Items
Define las opciones del menú y su correspondiente acción. Un ítem
puede llamar a otro menú, ejecutar un comando o un módulo de Oracle, así como
cualquier otro programa. Para cada ítem se define su posición en el menú,
tipo de comando, permisos de los usuarios, texto de identificación y la línea
del comando a realizar.
Parámetros
Variable que se carga en el momento de ejecución del menú y para la
cual se definen un nombre de dos letras, cantidad máxima de caracteres, texto
en pantalla en el momento de su ingreso, si es o no obligatorio, con o sin
conversión a mayúsculas y su valor por defecto.
Existen 5 parámetros del sistema cuya información podemos verla en la
tabla 1.
Parámetro |
Valor |
UN |
Nombre
del usuario. |
PW |
Contraseña
del usuario. |
AD |
Directorio
actual. |
SO |
Opción
seleccionada del menú. |
TT |
Tipo
de terminal en uso. |
Tabla 1. Parámetros del sistema.
Los parámetros se definen en la línea de comandos precedidos por &,
como por ejemplo &UN. Para los
bloques de código en PL/SQL se hace
referencia precedido con dos puntos de la forma :UN.
Tipos de comandos
En
SQLMenu, desde un menú, se pueden
realizar varios tipos de comandos. Pueden verse en la tabla 2.
Tipo |
Descripción |
1 |
Llamada
a un submenú. |
2,3 |
Tarea
del sistema operativo sin y con pausa. |
4 |
Conexión
con SQLForms. |
5 |
Conexión
con SQLPlus. |
6 |
Realiza
un Macro de SQLMenu. |
7 |
Realiza
un procedimiento en PL/SQL. |
Tabla 2. Lista de comandos que se
pueden realizar
A
continuación, para conocer cada tipo de comando, diseñaremos una aplicación
llamada CLIENTE, cuyo menú principal,
llamado también CLIENTE, esta
compuesto de 6 submenúes (tipo de comando 1), como se muestra en la tabla 3.
Menú |
Nº Item |
Tipo
comando |
Línea
comando |
CLIENTE |
1 |
1 |
FORMA |
|
2 |
1 |
REPORTE |
|
3 |
1 |
LISTADO |
|
4 |
1 |
PROCEDIMIENTO |
|
5 |
1 |
MACRO |
|
6 |
1 |
SISTEMA |
Tabla 3. Submenúes del menú CLIENTE
La
pantalla de nuestro menú CLIENTE se presenta de la siguiente forma:
FORMA REPORTE
LISTADO PROCEDIMIENTO
MACRO
SISTEMA
_______________________CLIENTE________________________
Pasaremos
a detallar cada submenú, para de esta forma detenernos en las particularidades
de cada tipo de comando.
FORMA
Realiza tareas del comando
tipo 4 para la integración de SQLMenu con SQLForms. En este caso pasamos como línea
de comando la orden RUNFORM con la información necesaria para la conexión,
como son, el nombre del usuario, su contraseña y el nombre de la forma a
activar. La sintaxis de este línea de comando corresponde a la de la orden
RUNFORM desde el sistema operativo, siendo necesario, en este caso, pasar el
nombre del usuario y su contraseña, definidos al momento de realizar la conexión
con SQLMenu, a través de los parámetros UN y PW.
En la tabla 4 se muestra como se activa la forma CLIENTES desde el menú FORMA.
Menú |
Nº
Item |
Tipo de
comando |
Línea
de comando |
FORMA |
1 |
4 |
RUNFORM
CLIENTES &UN/&PW |
Tabla 4. Cómo activar la pantalla CLIENTES
REPORTE
La conexión con SQLReport no
es de forma directa como lo es con SQLForms,
sino que se debe realizar a través del tipo de comando 2, que se encarga de
pasar la línea de comando del menú al sistema operativo para que lo procese.
En este caso se siguen las mismas reglas detalladas anteriormente para SQLForms.
En la tabla 5 se muestra como se activa el reporte llamado VENTAS
Menú |
Nº
Item |
Tipo de
comando |
Línea
de comando |
REPORTE |
1 |
2 |
RUNREP
VENTAS &UN/&PW |
Tabla 5. Cómo activar el reporte VENTAS
LISTADO
Los listados diseñados en SQLPlus
se activan con el tipo de comando 5, que es el que permite la integración de SQLMenu
con SQLPlus. La identificación del usuario y su contraseña se logra
con los parámetros UN y PW
como explicamos en los casos anteriores.
Menú |
Nº
Item |
Tipo de
comando |
Línea
de comando |
LISTADO |
1 |
5 |
SQLPlus
-S &UN/&PW @CLIENTE |
|
2 |
5 |
SQLPlus &UN/&PW \FAC\VENTAS |
Tabla 6. Cómo activar el listado LISTADO
Los archivos de listado, por ejemplo CLIENTE.sql,
debe tener EXIT como último comando, con el fin de garantizar la desconexión
de SQLPlus y el regreso a SQLMenu.
El parámetro -S de SQLPlus suprime todas las visualizaciones de especificaciones del SQLPlus
por pantalla.
PROCEDIMIENTO
Para ejecutar un procedimiento del sistema o del usuario, así como un
bloque anónimo de PL/SQL escrito directamente en la línea de comando del menú, se
utiliza el tipo de comando 7.
Menú |
Nº
Item |
Tipo de
comando |
Línea
de comando |
PROCEDIMIENTO |
1 |
7 |
EXIT_MENU; |
|
2 |
7 |
PROCEDURE
CAMBIO IS |
|
|
|
BEGIN |
|
|
|
... |
|
|
|
END; |
|
3 |
7 |
NUEVO; |
Tabla 7. Cómo ejecutar un
procedimiento.
En nuestro ejemplo, el ítem 1 es un procedimiento del sistema, el 2 es
un bloque anónimo y el 3 es un procedimiento creado por el usuario.
En el fuente 1 vemos la definición del procedimiento NUEVO, para de esta forma explicar algunos de ellos:
Fuente
1: Procedure Name: NUEVO
------Procedure Text -------------
PROCEDURE NUEVO IS
BEGIN
NEW_USER('EIDOS/ESPAÑA');
NEW_APPLICATION('VENTAS');
MAIN_MENU;
OS_COMMAND('DIR');
EXIT_MENU('Fin
del Menú');
END;
Donde:
NEW_USER
Desconecta al usuario actual y conecta un nuevo usuario.
NEW_APPLICATION Cambia de
aplicación.
MAIN_MENU
Pasa al menú principal.
OS_COMMAND
Realiza un comando del sistema operativo.
EXIT_MENU
Salida del Menú.
MACRO
Existe un conjunto de macros incorporadas al SQLMenu
que pueden ser llamados desde un menú, como los que se muestran la tabla 8.
Menú |
Nº
Item |
Tipo de
comando |
Línea
de comando |
MACRO |
1 |
6 |
NEWUSER; |
|
2 |
6 |
NEWAPL; |
|
3 |
6 |
MAINMENU;ASSIGN
DK=A:; |
Tabla 8. Ejecución de macros que pueden ser llamadas.
Los macros tienen un procedimiento equivalente en SQLMenu
y viceversa. En los manuales de Oracle existe una tabla de correspondencia entre
Macro-Procedimiento-Tecla de Función.
Esta dualidad está dada con el fin de mantener la compatibilidad con versiones
anteriores de SQLMenu.
Algunas macros tienen argumentos, como la macro ASSIGN,
cuyo objetivo es asignar un nuevo valor a un parámetro definido por el usuario.
La definición y el uso de los parámetros lo veremos más adelante.
SISTEMA
Los comandos de tipo 2 y 3 son los que se usan para hacer tareas desde el
sistema operativo, pasando una línea de comando directamente al sistema
operativo para su ejecución, como ya vimos anteriormente para el caso de los
reportes. La diferencia consiste en que después de realizar el comando de tipo
2 se retorna al menú inmediatamente, y con el tipo 3 se realiza una pausa antes
de retornar al menú, quedando a la espera de que el usuario presione alguna
tecla para continuar.
Menú |
Nº
Item |
Tipo de
comando |
Línea
de comando |
SISTEMA |
1 |
2 |
CHKDSK
&DK |
|
2 |
3 |
DIR
&DK |
Tabla 9. Ejecución de tareas del
sistema
En este ejemplo se usa el parámetro DK
para identificar la unidad de disco con la cual se va a trabajar. En la figura 1
se muestra la pantalla de definición de este parámetro.
|
Parameter
Definition |
|
¯¯¯¯¯¯¯¯¯¯ Parameter |
DK
|
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ [
x ] Echo |
Size |
2 |
[
] Fixed Length |
Prompt |
Diskette
A: B: o disco |
[
] Required |
|
(Select
Menus ) |
[
] Upper Case |
¯¯¯¯¯¯¯¯¯¯ |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |
Default |
C: |
|
Hint |
|
|
Figura 1. Pantalla de definición
del parámetro DK.
Una vez seleccionado la opción del menú SISTEMA
que hace referencia al parámetro DK,
aparecerá en pantalla, para ingresar el valor del parámetro, el siguiente
cuadro:
Enter
Parameter Value(s)
Diskette
A: B: o disco
C:
Integración desde SQLForms
La
integración de módulos, como los casos que acabamos de estudiar, también esta
presente en SQLForms, desde donde podemos activar los módulos SQLReport
y SQLPlus a través del sistema operativo.
En
artículos anteriores estudiamos por separado SQLForms
y SQLReport, ahora pasaremos a ver como se realiza la integración de
estos dos módulos. Las definiciones a realizar para esta integración son las
siguientes:
En SQLReport:
- Parámetros y sus valores por defecto. Esta
es la vía que tenemos para pasar los datos necesarios, desde SQLForms, en el
momento de la ejecución del reporte.
En SQLForms:
- Campos de
la forma donde se van a ingresar los valores a pasar como parámetros al
reporte.
- Procedimiento
que invoca a SQLReport con sus
correspondientes parámetros. Para esto se usa la orden HOST,
procedimiento del sistema que tiene como función enviar un comando al sistema
operativo, en este caso RUNREP,
garantizando el paso de variables a través de los parámetros y el retorno
automático a SQLForms.
Veamos
primero la definición de los parámetros en SQLReport,
cuyo objetivo es controlar diferentes aspectos del reporte, como son:
dispositivo de salida, tipo de impresora, número de copias y datos específicos
del usuario. Para ello retomaremos el ejemplo VENTAS,
diseñado en nuestro artículo anterior ORACLE
BASICO V (ver Algoritmo Nº13): Reportes
con SQLReport. En la tabla 10 podemos ver los parámetros del sistema y del
usuario con sus respectivos significados.
|
Nombre |
Tipo |
Ancho |
Valor |
Identificación |
SISTEMA |
DESTYPE |
CHAR |
80 |
Printer |
Tipo
de salida: Screen, File o Printer |
|
DESNAME |
CHAR |
80 |
PRN |
Nombre
de Dispositivo o archivo |
|
DESFORMAT |
CHAR |
80 |
dflt |
Especifica
tipo de formato de la impresora para sus códigos de control. |
|
COPIES |
NUM |
2 |
1 |
Número
de Copias |
USUARIO |
XCOD |
NUM |
10 |
2 |
Código
Cliente |
|
XDIAS |
NUM |
5 |
30 |
Cantidad
de Días |
Tabla 10. Parámetros del sistema y
del usuario.
Ahora
crearemos, en SQLForms, el procedimiento llamado REPORTE, cuyo objetivo es realizar el reporte VENTAS. (Véase el fuente 2)
/*
Fuente 2 */
PROCEDURE
REPORTE IS
BEGIN
DECLARE
/*
Variables locales de memoria, de tipo
carácter, cuyo
objetivo es cargar los valores de los
campos numéricos
de la forma.
*/
XC CHAR(10);
XD
CHAR(5);
BEGIN
/*
Asignación de los valores de los
campos de la forma
YCOD y YDIAS a las variables locales
con su correspondiente
conversión a carácter.
*/
XC:=TO_CHAR(:YCOD);
XD:=TO_CHAR(:YDIAS);
/*
Llamada a SQLReport por medio de la
orden HOST,
con la correspondiente cadena de
caracteres
de definición de parámetros.
*/
HOST ('RUNREP REPORT=VENTAS
USERID=EIDOS/ESPAÑA
PARAMFORM=NO
DESTYPE=PRINTER
DESNAME=PRN
COPIES=3
XCOD='||XC||
'
XDIAS='||XD
);
END;
END;
Donde:
REPORT=VENTAS
Indica que el reporte a ejecutar esta en el archivo VENTAS.rep, donde quedó
registrado el resultado de la compilación efectuada desde SQLReport.
USERID=EIDOS/ESPAÑA
Identifica el nombre del usuario y su contraseña.
PARAMFORM=NO
Indica que los parámetros se pasan directamente en la línea de comando,
de lo contrario se solicitaría su ingreso por pantalla en el momento de la
ejecución.
DESTYPE=PRINTER
Salida por impresora.
DESNAME=PRN
Nombre de la impresora.
COPIES=3
Cantidad de copias.
En
esta integración no existe límite en la cantidad de parámetros a transferir,
existiendo la posibilidad de construir un archivo de parámetros. Por ejemplo,
si escribimos los parámetros en el archivo ventas.para, la conexión con SQLReport
desde el procedimiento REPORTE sería
de la siguiente forma:
HOST ('RUNREP REPORT=VENTAS
CMDFILE=VENTAS.PAR'
);
La
integración de SQLForms con SQLPlus
cumple las mismas reglas detalladas anteriormente para SQLReport, sólo varía la sintaxis en la orden HOST ya que ésta corresponde a las especificaciones del comando SQLPLUS
como se muestra a continuación:
HOST ('SQLPLUS
EIDOS/ESPAÑA @LISTADO '||
:F1||
' '||
:F2
);
Donde:
EIDOS/ESPAÑA
Identificación de usuario y su contraseña.
@LISTADO
Archivo que contiene los comandos SQL a ejecutar.
:F1 y :F2
Campos de la forma, de tipo carácter, cuyos valores se pasa como parámetros
al SQLPlus en el momento de la ejecución.
Con
este artículo llegamos al final de la serie sobre Oracle
Básico, donde hemos analizado sus aspectos básicos, así como sus rasgos más
significativos. Espero haber logrado, por un lado, introducir al lector en el
mundo de bases de datos relacionales y SQL
y, en el caso de aquellos que ya desarrollan aplicaciones en este entorno,
impulsarlos a seguir avanzando en el estudio de Oracle.
Bibliografía
Oracle 7 Manual de Referencia
Koch,
George.
Osborne/McGraw-Hill
1994
Oracle Manual de Referencia.
Koch,
George.
Osborne/McGraw-Hill.
1992
Mastering
Oracle.
Cronin,
Daniel.
Hayden Books.
1990