Indice
INDICE...................................................................................................................................... 1
VARIABLES DE ENTORNO................................................................................................. 67
BIBLIOGRAFÍA..................................................................................................................... 69
Modelos de Datos
Además del Modelo Relacional que, por su importancia, se estudiará por
separado, existen otros modelos de datos que se definirán brevemente a
continuación.
Modelo Jerárquico
En este modelo solamente es posible una asociación o lazo: aquella que se
puede representar como de 1:N, o padre/hijo. Una base de datos que siga este
modelo se podría representar como un árbol donde las ramas son los lazos y las
hojas son las entidades. Una entidad recibe el nombre de segmento y está formada
por campos. (A. Zeroual 1991)
Modelo Objeto
En este modelo, los datos se estructuran de forma dinámica. A partir de tipos
base, se construyen nuevos tipos (o clases) que, a su vez, participan en la
construcción de otros nuevos tipos o clases, y así sucesivamente. La construcción se
hace por herencia o por composición. Este modelo se distingue de los demás por su
flexibilidad y, por tanto, por su capacidad de modelizar objetos complejos.
El Modelo Relacional
Clave
Si se parte de la base de que una relación es un conjunto, entonces todas sus
tuplas han de ser diferentes, es decir no se pueden repetir sus valores. A partir de
aquí se define que un conjunto de atributos de la relación que no pueden tomar
valores repetidos es una clave. Toda relación tiene al menos una clave, pero puede
tener mas de una, aunque suele aceptarse la conveniencia de emplear siempre la
misma clave como identificador. A esta clave se le suele llamar clave primaria. Las
claves restantes son las claves alternativas.
Las claves se utilizan para identificar cada una de las tuplas de una relación. La
única forma de dirigirse a una tupla determinada, distinguiéndola de todas las demás,
es mediante los valores de los atributos de alguna de sus claves (E. Rivero, 1988).
Operadores
En lo que se refiere a los operadores, su función aparece reflejada en el
esquema siguiente:
Unión: Se representa por R U S, donde R y S son relaciones.
Es el resultado de una relación que incluye todas las
tuplas de R y todas las tuplas de S y ninguna mas. Si
hubiera alguna repetida en esas relaciones, solo figurará
una vez en el resultado.
Diferencia: El resultado es una relación que incluye todas las tuplas
de R que no están en S.
Producto Cartesiano: El resultado incluye todas las tuplas posibles resultado
de concatenar cada tupla de R con todas las tuplas de
S.
Proyección: El resultado se obtiene extrayendo de la relación R, el
conjunto de atributos A1… AN, y eliminando luego las
tuplas repetidas si las hay. Consiste en una partición
vertical de la relación.
Selección: El resultado se obtiene extrayendo de la relación R
todas las tuplas que cumplan la condición F. Consiste en
una partición horizontal de la relación.
Definiciones de Integridad
Según la definición de clave primaria, ésta no debería tomar valores nulos para
evitar ambigüedades. Esta condición es la que se ha denominado Regla de
Integridad de Claves Primarias. En la literatura es frecuente encontrarla como
Integridad de Entidad. (E. Rivero, 1988)
Cuando una relación presenta varias claves, cualquiera de ellas puede ser
designada a priori como primaria. Para seleccionar las mas conveniente, existen una
serie de criterios que el diseñador de la base de datos debe tener en cuenta. Estos
criterios son:
Reglas de Integridad
Otra de las reglas que contempla el modelo relacional es la Regla de Integridad
Referencial o Integridad de Referencia. Es posible que algunas relaciones hagan
referencia a otras por medio de las claves primarias de éstas, de tal forma que no
pueda existir ninguna tupla en aquellas relaciones que no exista simultáneamente en
alguna de éstas (E. Rivero, 1988).
Lenguajes Relacionales
Los operadores de conjuntos aplicados a las tablas constituyen el Álgebra
Relacional. Estos operadores de conjuntos no pueden constituir un lenguaje de
manipulación de datos por sí solos. Los principales lenguajes relacionales conocidos
son SQL, QUEL y QBE.
Etapas
Este maneja todas las solicitudes de acceso a la base de datos por parte de los
usuarios.
Una función general de un SGBD es proteger a los usuarios contra todos los
detalles a nivel de hardware. Un SGBD no pasa de ser una parte a nivel de software
de una estructura mas grande y compleja que se define como un Sistema de Bases
de Datos.
Informix-SQL
Historia
La historia de Informix comienza en 1980 con la fundación de RDS (Relational
Database Inc.) por Roger Shippl para producir C-ISAM (Indexed Sequential Access
Method in C) sobre Unix y MS-DOS. Dos años mas tarde RDS produce Informix como
un SGBD relacional basado en C-ISAM. Actualmente C-ISAM es una librería de
subrutinas para uso de programadores en C, de tal forma que los usuarios finales
nunca usan C-ISAM directamente, sino a través de programas que utilizan C-ISAM.
Definición
Informix-SQL es un Sistema de Gestión de Bases de Datos Relacionales que
utiliza SQL. En inglés se utilizan también las iniciales RDBMS (Relational Database
Management System). SQL (Structured Query Language) es un lenguaje escrito
específicamente para operar con bases de datos relacionales, y proporciona un
conjunto de herramientas para su administración y manejo. Una extensión ha sido
añadida a la norma SQL para ofrecer al usuario un lenguaje mas completo. Este
nuevo lenguaje es procedural y permite la definición y manipulación de datos a través
de interfaces o de programas clásicos. Junto con C-ISAM constituye la única forma
de acceder a las bases de datos.
Arquitectura
Funcionalmente, Informix-SQL está organizado en tres niveles. El primero
concierne a la gestión de datos y está compuesto por el servidor de datos. Éste utiliza
generalmente C-ISAM para el almacenamiento y acceso a los datos, pero puede
utilizar Informix -Turbo o Informix-OnLine. Ofrece un optimizador de sentencias SQL
para determinar el camino óptimo de acceso a los datos y aceleradores para
aumentar el rendimiento de la búsqueda de datos.
El segundo nivel está formado por un conjunto de utilidades de desarrollo de
aplicaciones. Estas utilidades son las siguientes:
Un editor de esquemas de bases de datos interactivo que permite la
creación, borrado y modificación de estructuras de datos sin utilizar un lenguaje de
definición de datos. Estas operaciones se realizan utilizando una serie de opciones
en un sistema de menús. El editor guía al usuario a través de la definición de las
diferentes características de las tablas.
Un editor SQL interactivo. El lenguaje RDSQL de Informix está compuesto de
órdenes que aseguran la definición, manipulación y control de los datos.
Un generador que permite la creación y utilización de formatos de pantalla.
La manipulación de datos a través de la pantalla es una alternativa fundamental de
cara a los usuarios finales que no conocen SQL. PERFORM, como generador de
formatos de pantalla permite crear un formato simple de una manera interactiva.
Para alcanzar las posibilidades mas complejas es necesario recurrir a un pequeño
lenguaje de programación.
Sistema de menús
Menú Principal:
Opción Form
Run Modify Generate New Compile Drop Exit
Opción Report
Run Modify Generate New Compile Drop Exit
Opción Query-Lenguage
New Run Modify Use-Editor Output Choose Save Info Drop Exit
Opción User-Menu
Run Modify Exit
Opción Database
Select Create Drop Exit
Opción Table
Create Alter Info Drop Exit
Opción Exit
Una vez que se ha realizado una detallada labor de diseño de una base de
datos, el siguiente paso consiste en su implementación a través de un SGBD. En el
presente capítulo se estudiarán los pasos necesarios para crear una Base de Datos
utilizando Informix-SQL.
Opción Utilización
Select Permite Seleccionar una de las bases de datos previamente creadas.
Create Permite crear una nueva base de datos. Pregunta por el nombre que se
le desea atribuir, y la convierte en la base de datos activa. Este proceso
se traduce en la creación de un nuevo subdirectorio del directorio por
defecto, donde se almacenarán todos los ficheros correspondientes de
la nueva base de datos creada.
Drop Permite eliminar una base de datos existente.
Exit Regresa al menú anterior.
Para crear una base de datos, se elegirá la opción Create. En el siguiente paso,
Informix pregunta por el nombre de la base de datos. Se puede añadir cualquier
nombre que soporte el sistema operativo (Unix). Una vez escrito el nombre y pulsado
Enter, la base de datos creada pasa a ser la base de datos activa.
Si se desea ver el contenido del directorio actual, o ejecutar algún comando
propio del sistema operativo, lo único que debe hacer el usuario es preceder ese
comando por el carácter !. Por ejemplo, si se desea comprobar la creación de la
nueva base de datos, la orden a teclear en Unix será:
!ls
En el subdirectorio creado con el nombre de la base de datos se crearán una
serie de ficheros llamados Catálogos del Sistema donde se registrará toda la
información sobre la base de datos creada.
Si se deseara abortar la ejecución de cualquier menú, se utilizará la opción Exit.
En el caso de que el menú activo no presente esa opción, (como cuando está
preguntando por un nombre, por ejemplo) para salir de ese menú, se puede utilizar la
combinación de teclas control-c.
El ejemplo que se seguirá en el presente manual consistirá en una base de
datos destinada a almacenar información acerca de los empleados de una empresa.
El nombre de la base de datos será Manual1. Informix asignará automáticamente la
extensión .dbs.
Creación de tablas
Una vez creada la base de datos, el siguiente paso consiste en el proceso de
creación de tablas. Estas tablas ya han sido diseñadas, y el único trabajo que resta
es implementar esas tablas en Informix.
Cuando se genera una tabla en Informix, se crean dos ficheros con las
extensiones .Dat y .Idx. Estos ficheros guardan información sobre datos e índices
respectivamente.
Para crear una tabla en Informix, se seleccionará la opción Table del menú
principal por cualquiera de los procedimientos escritos anteriormente. Una vez
seleccionada la opción, aparecen las siguientes opciones:
Opción Utilización
Create Da comienzo al proceso de creación de una tabla.
Alter Permite modificar la estructura de una tabla ya creada.
Info Suministra información sobre una tabla.
Drop Permite eliminar una tabla existente.
Exit Regresa al menú anterior.
Create Table>>
Enter the table name you wish to create with the schema editor.
Para seleccionar las opciones del menú principal se utiliza la barra espaciadora.
Para seleccionar las características del atributo que se está definiendo, se utilizan las
flechas de movimiento de cursor.
El significado de cada una de las opciones del menú principal es el siguiente:
Opción Utilización
Add Añade una nueva columna a la tabla seleccionada.
Modify Permite modificar las características del campo seleccionado.
Drop Elimina la columna seleccionada de la tabla.
Screen En el caso de que la definición de una tabla ocupe mas de una pantalla,
esta opción permite ir a la siguiente pantalla de definición.
Exit Regresa al menú anterior.
Tipos de Datos
Básicamente, solo existen dos tipos de datos: Alfanuméricos y Numéricos.
Índices
Para cada una de las columnas de la tabla, además de indicar su tipo y
longitud, se puede indicar si dicha columna será o no índice de la tabla. Un índice es
una etiqueta que se asigna a una o varias columnas para localizar los datos de
manera mas rápida y eficiente.
Existen dos tipos de índices:
Único (Unique): No permite duplicar los valores dentro de una columna.
Dups: Permite duplicar valores dentro de una columna.
La estrategia de indexación depende de los siguientes criterios:
Se deberá definir un índice en una columna cuando:
Valor Null
El último dato que necesita Informix-SQL para definir un campo es si éste
puede guardar o no valores nulos. El valor NULL se utiliza para representar valores
Tablas Ejemplo
Las tablas que van a ser utilizadas en este manual presentan la siguiente
estructura:
Opción Utilización
Run Utiliza un formulario creado anteriormente.
Modify Permite modificar un formulario creado anteriormente desde un editor de
texto. En UNIX el editor por defecto es VI.
Generate Permite generar un formulario por defecto. Es la opción que se utilizará
para crear formularios fácilmente sin necesidad de poseer
conocimientos adicionales.
A continuación Informix-SQL pregunta sobre que tabla se desea que actúe ese
formulario, de forma que al añadir datos, estos vayan a parar a esa tabla, o que a la
hora de realizar consultas utilizando este formulario, esas consultas afecten a dicha
tabla.
Opción Utilización
Table-Selection-Complete Crea el formulario utilizando la tabla anteriormente
especificada.
Select-more-Tables Permite añadir mas tablas a la seleccionada anteriormente.
Se pueden añadir hasta diez tablas en un formulario.
Exit Regresa al menú anterior.
PERFORM: Query Next Previous Add Update Remove Table Screen Current
Opción Utilización
Query Permite realizar una consulta a la tabla seleccionada.
Next Presenta el siguiente registro de la lista activa.
Previous Presenta el anterior registro de la lista activa.
Add Añade datos a la tabla. Esta es la opción que se habrá de seleccionar si
se desea añadir datos de la forma mas sencilla.
Update Permite modificar el contenido de un registro en la tabla activa.
Remove Elimina un registro de la tabla activa.
Table Selecciona la tabla activa.
Screen En el caso de que el formulario actual no quepa en la pantalla presente,
esta opción avanza a la siguiente pantalla para seguir viendo el
contenido del formulario.
Current Muestra el registro activo de la tabla activa.
Master Selecciona la tabla patrón de la tabla activa.
Detail Selecciona una tabla de detalle de la tabla activa.
Output Envía el contenido del formulario a un informe o a un archivo.
Exit Regresa al menú anterior.
numem [ ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]
Tecla Descripción
Control-x Borra un carácter.
Control-a Pone y quita modo inserción.
Control-d Borra hasta el final del campo.
Control-f Avanza rápido a través de los campos.
Control-b Retroceso rápido a través de los campos.
Control-c Interrumpir.
Control-p Proporciona el valor mas reciente del campo.
Control-w Muestra el mensaje de ayuda.
Delete Cancela un comando.
Return, Control-j, Moverse de campo a campo durante los comandos Query, Add y
Flecha abajo Update.
Control-k, Flecha Mueve el cursor atrás al comienzo del campo anterior.
Arriba
Control-h, Flecha Mueve el cursor hacia atrás un carácter en un campo.
izquierda,
Backspace
Flecha derecha, Mueve el cursor un espacio a la derecha en un campo.
Control-n
Escape Entrada completada.
Ejecución de consultas
Tipos de Consultas
Como se expresó en los capítulos iniciales, existen fundamentalmente dos
tipos de consultas ejecutables desde Informix-SQL. El primer tipo lo forman las
consultas QBE (Query by Example). Para ejecutar una consulta de este tipo, no es
necesario conocer ningún lenguaje de manipulación de datos, sino solamente saber
cómo son realizadas estas consultas desde Informix-SQL.
El otro tipo de consultas está formado por aquellas que se redactan utilizando
lenguaje SQL (Structured Query Language). En el caso concreto de Informix el
lenguaje exacto que se utiliza es RDSQL. Consiste en una norma basada en SQL
con algunas ampliaciones. Para crear y ejecutar consultas de este tipo, es necesario
conocer RDSQL en profundidad. Este lenguaje se estudiará en el apartado siguiente.
numem [ ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]
Desde esta pantalla, el usuario está en disposición de, o bien añadir datos,
como se explicó en el apartado anterior, o bien realizar consultas a la base de datos
como se verá a continuación.
Para obtener todos los datos de la tabla, se seleccionará la opción Query y a
continuación se pulsará la tecla Escape. En las zonas de la pantalla destinadas a
datos (entre corchetes) aparecerán los valores de los campos del primer registro de la
tabla. Para pasar a ver los datos de los siguientes registros se utilizará la opción Next.
Desde los siguientes registros, para acceder a los valores de un registro anterior, se
utilizará la opción Previous.
Por último, para abandonar esta pantalla se utilizará la opción Exit.
numem [ ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]
numem [120 ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]
Operador Significado
> Mayor que
< Menor que
<= Menor o Igual que
>= Mayor o igual que
= Igual que
<> Distinto a
V1:V2 Valores entre V1 y V2 incluidos
V1|V2 Valor V1 o V2
=* El valor *
= Valor Nulo
Notas:
Creación de un informe
Al igual que en el caso de los formularios, Informix-SQL puede generar
automáticamente Informes basados en los datos contenidos en las tablas. Estos
informes se pueden destinar impresora o a un archivo para su posterior impresión o
exportación a otras aplicaciones. Como en el caso de los formularios, el generador de
informes (ACE) no requiere tener conocimientos de ningún lenguaje de manipulación
de datos.
Opción Utilización
Run Ejecuta un informe creado previamente.
Modify Permite modificar un informe generado previamente. Se utilizará el
editor de texto por defecto. En el caso de Unix, este editor es VI.
Generate Genera un informe por defecto. Esta es la opción que se utilizará en el
caso presente.
New Crea una nueva especificación de Informe. Este proceso se realiza
desde un editor de texto. Se estudiará adecuadamente en una sección
posterior de este manual.
Compile Compila un informe creado o modificado desde un editor.
Drop Elimina un informe creado anteriormente.
Exit Regresa al menú anterior.
En este menú se pide al usuario que seleccione la tabla sobre cuyos datos se
desea elaborar el informe.
Automáticamente el informe es generado e Informix-SQL deja al usuario en el
menú principal de Informes.
RDSQL
RDSQL es la norma creada a partir de SQL con algunas ampliaciones que
permiten mejorar el rendimiento de SQL estándar. Es propio de Informix aunque, en
general, las diferencias entre uno y otro sean escasas.
RDSQL esta basado en una serie de cláusulas u órdenes que aplicadas a una
o varias tablas de una base de datos, proporcionan la posibilidad de realizar
operaciones de manipulación de datos.
RDSQL: New Run Modify Use-Editor Output Choose Save Info Drop Exit
Enter new RDSQL Statments using the RDSQL Editor.
Las operaciones que permiten realizar cada una de estas opciones son las
siguientes:
Opción Utilización
New Permite añadir una nueva sentencia SQL usando el editor de SQL.
Run Ejecuta una sentencia SQL previamente redactada.
Modify Permite modificar una sentencia SQL creada anteriormente.
Use-Editor Permite crear o modificar una sentencia SQL creada anteriormente
usando el editor seleccionado por el usuario, o configurado por defecto.
Output Envía los resultados de una consulta a impresora o a un fichero.
Choose Elige una línea de comando como la sentencia REDSQL activa.
Save Guarda las sentencias SQL actuales en un archivo de comandos.
Info Proporciona información acerca de las tablas de la base de datos activa.
Drop Elimina un fichero de comandos RDSQL.
Exit Regresa al menú anterior.
SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]
SELECT nomem,numhi,salar,comis
FROM temple
Las opciones del menú principal permiten realizar las siguientes acciones:
Opción Utilización
Next Muestra la siguiente página de resultados.
Restart Comienza desde el principio de la sentencia SQL actual.
Exit Regresa al menú anterior.
Utilizando la opción Exit, se puede regresar al menú anterior. Desde este menú,
utilizando la opción Modify, se puede modificar la redacción de la sentencia SQL.
SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]
ORDER BY [campo1,campo2,campo3,....campoN]
En el ejemplo:
SELECT nomem,numhi,salar,comis
FROM temple
ORDER BY numhi,nomem
SELECT nomem,numhi,salar,comis
FROM temple
ORDER BY numhi,nomem DESC
SELECT puede llevar añadidas las cláusulas ALL, DISTINTC, UNIQUE. Estas
cláusulas proporcionan la posibilidad de:
ALL: Todos los valores. Es la opción por defecto.
DISTINCT / UNIQUE: Seleccionar los valores diferentes de la tabla.
RDSQL: New Run Modify Use-Editor Output Choose Save Info Drop Exit
Run and sends query results to a printer or a file.
Opción Utilización
Printer Envía el resultado de la consulta a una Impresora.
New-File Genera un nuevo fichero e incluye en él los datos de salida de la
consulta.
Append-File Añade los datos de la consulta a un fichero existente.
Exit Regresa al menú anterior.
SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]
WHERE [Condición]
ORDER BY [campo1,campo2,campo3,....campoN]
En el ejemplo:
SELECT nomem,numhi,salar,comis
FROM temple
WHERE numhi=2
ORDER BY numhi,nomem
Esta nueva sentencia presentará los mismos datos que la anterior, pero solo
para aquellos empleados cuyo número de hijos sea igual a dos.
Toda consulta a una tabla con un gran número de filas será mas eficiente si la
columna de la cláusula WHERE está indexada.
La cláusula WHERE puede establecer una exclusión de valores. En este caso,
su sintaxis será la siguiente:
SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]
WHERE [Campo != valor]
ORDER BY [campo1,campo2,campo3,....campoN]
En el ejemplo:
SELECT nomem,numhi,salar,comis
FROM temple
WHERE numhi !=2
ORDER BY numhi,nomem
SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]
WHERE [Campo1= valor] AND [Campo2=valor] AND ...
ORDER BY [campo1,campo2,campo3,....campoN]
En el ejemplo:
SELECT nomem,numhi,salar,comis
FROM temple
WHERE numhi > 3 AND numhi < 6
ORDER BY numhi,nomem
SELECT nomem,numhi,salar,comis
FROM temple
WHERE numhi = 2 OR numhi = 5
ORDER BY numhi,nomem
SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]
WHERE [Campo1 BETWEEN valor1 AND valor2]
ORDER BY [campo1,campo2,campo3,....campoN]
SELECT nomem,numhi,salar,comis
FROM temple
WHERE numhi BETWEEN 3 AND 6
ORDER BY numhi,nomem
SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]
WHERE [Campo1 IN (valor1, valor2.....valorN)
ORDER BY [campo1,campo2,campo3,....campoN]
En el Ejemplo:
SELECT nomem,numhi,salar,comis
FROM temple
WHERE numhi IN (1,2)
ORDER BY numhi,nomem
SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]
WHERE [Campo1 IS NULL]
ORDER BY [campo1,campo2,campo3,....campoN]
En el Ejemplo:
SELECT nomem,numhi,salar,comis
FROM temple
WHERE comis IS NULL
ORDER BY numhi,nomem
SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]
WHERE [Campo1 MATCHES “valor*”]
ORDER BY [campo1,campo2,campo3,....campoN]
En el ejemplo:
SELECT nomem,numhi,salar,comis
FROM temple
WHERE nomem MATCHES “Polo*”
ORDER BY numhi,nomem
SELECT nomem,numhi,salar,comis
FROM temple
WHERE nomem LIKE “Polo%”
ORDER BY numhi,nomem
SELECT nomem,numhi,salar,comis
FROM temple
WHERE nomem NOT LIKE “Polo%”
ORDER BY numhi,nomem
SELECT nomem,numhi,salar,comis
FROM temple
WHERE nomem MATCHES “[R-V]*”
ORDER BY numhi,nomem
Funciones Agregadas
Las funciones agregadas disponibles son:
Función Utilización
COUNT(*) Cuenta las filas.
COUNT(DISTINCT nombre-columna) Cuenta cuantos valores diferentes aparecen
para el campo especificado.
SUM(x) Suma todos los valores de una columna.
SUM (DISTINCT nombre-columna) Solo suma una vez los valores repetidos.
AVG(x) Halla el valor medio de los valores de una
columna.
AVG(DISTINCT nombre-columna) Solo cuenta una vez los valores repetidos para
hallar la media.
MAX(x) Calcula el valor máximo de una columna.
MIN(x) Calcula el valor mínimo de una columna.
La “x”puede representar un nombre de columna o una expresión.
Ejemplos:
Función Ejemplo
COUNT(*) SELECT COUNT(*)
FROM temple
COUNT(DISTINCT nombre-columna) SELECT COUNT(DISTINCT numhi)
FROM temple
SUM(x) SELECT SUM(salar)
FROM temple
SUM (DISTINCT nombre-columna) SELECT SUM(DISTINCT salar)
FROM temple
AVG(x) SELECT AVG(salar)
FROM temple
AVG(DISTINCT nombre-columna) SELECT AVG(DISTINCTsalar)
FROM temple
MAX(x) SELECT MAX(salar)
FROM temple
MIN(x) SELECT MIN(salar)
FROM temple
Cláusula GROUP BY
La cláusula GROUP BY se utiliza para producir una única fila de resultados
para cada grupo. Un grupo es un conjunto de filas que tienen el mismo valor en una
columna dada.
Ejemplo:
Esta consulta devolverá los valores Medio del salario, Máximo del salario,
Mínimo del salario, La media de los dos y el número de departamento, agrupados por
departamentos, ordenados por departamentos y que cumplan que la media del
salario es mayor que 400.000.
Los requisitos que se deben cumplir para poder realizar consultas de este tipo
son:
Ø Las tablas deben tener una columna en común es decir, dos columnas
que se pueden comparar.
Ø Las columnas de join deben ser de tipos compatibles: Un dato SERIAL se
almacena como un entero. Entonces, una columna SERIAL puede ser
comparado con una columna INTEGER en la condición. Para comparar
columnas CHAR, deben tener la misma longitud.
Ø Por razones de rendimiento, las columnas en la condición de JOIN deben
tener índices.
Debe notarse que una consulta de JOIN entre dos tablas se realiza de las
siguiente forma:
Tabla1 Tabla2
Campo1 Campo2 Campo2 Campo3
María 1 1 Fútbol
José 3 2 Baloncesto
Alberto 2 2 Balonmano
La sentencia
Devolverá
Campo1 Campo3
María Fútbol
María Baloncesto
María Balonmano
José Fútbol
José Baloncesto
José Balonmano
Alberto Fútbol
Alberto Baloncesto
Alberto Balonmano
Devolverá:
Campo1 Campo3
María Fútbol
Alberto Baloncesto
Alberto Balonmano
Campo1 Campo3
María Fútbol
José
Alberto Baloncesto
Alberto Balonmano
Formatos Personalizados
Como se ha visto anteriormente, Informix permite generar formatos de pantalla
por defecto. Estos formatos permiten al usuario tanto añadir datos, como modificar o
borrar estos datos e incluso realizar consultas. Sin embargo, el formato de pantalla
que se genera por defecto es sumamente sencillo, y habrá ocasiones en las que se
deseará crear formatos de pantalla mas sofisticados.
menú, elegir la opción Generate, especificar el nombre que se desea asignar a este
formato, especificar la tabla cuyos datos se desean gestionar desde este formato,
elegir la opción Table - Selection - Complete (en el caso de que sea ésta la opción
deseada), y, por último, seleccionar la opción Run y especificar que formato se desea
ejecutar.
Como se decía en el párrafo anterior, en este manual se va a partir de un
formato creado por defecto, y se va a modificar utilizando un editor de texto. El editor
de texto por defecto en Unix es el VI.
El formato creado automáticamente se presenta en pantalla como aparece en la
figura siguiente:
numem [ ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]
database EJEMPLO1
screen
{
numem [f000 ]
numde [f001 ]
extel [f002 ]
fecna [f003 ]
fecin [f004 ]
salar [f005 ]
comis [f006 ]
numhi [f007 ]
nomem [f008 ]
}
end
tables
temple
attributes
f000 = temple.numem;
f001 = temple.numde;
f002 = temple.extel;
f003 = temple.fecna;
f004 = temple.fecin;
f005 = temple.salar;
f006 = temple.comis;
f007=temple.numhi;
f008=temple.nomem;
end
database EJEMPLO1
screen
{
Número de empleado: [f000 ]
------------------------------
Número de Departamento: [f001 ]
------------------------------------
Extensión telefónica: [f002 ]
----------------------------
Fecha de Nacimiento: [f003 ]
-----------------------------
Fecha de Ingreso: [f004 ]
------------------------
Salario: [f005 ]
---------
Comisiones: [f006 ]
----------------
Número de Hijos: [f007 ]
-----------------------
Nombre de Empleado: [f008 ]
------------------------------
}
end
tables
temple
attributes
f000 = temple.numem;
f001 = temple.numde;
f002 = temple.extel;
f003 = temple.fecna;
f004 = temple.fecin;
f005 = temple.salar;
f006 = temple.comis;
f007=temple.numhi;
f008=temple.nomem;
end
Como se puede comprobar, solo se han cambiado los nombres de los campos
por indicaciones mas familiares al lenguaje normal y se han añadido una serie de
subrayados. Cuando se ha terminado de realizar esas modificaciones, se saldrá del
editor guardando los cambios, e Informix presentará automáticamente el menú de
Modificar Formato en pantalla.
Número de Empleado: [ ]
Número de Departamento: [ ]
Extensión Telefónica: [ ]
Fecha de Nacimiento: [ ]
Fecha de Ingreso: [ ]
Salario: [ ]
Comisiones: [ ]
Número de Hijos: [ ]
Nombre de Empleado: [ ]
Atributo Significado
Comments: Añade una línea de comentarios en la parte
inferior de la pantalla.
Reverse: Cambia la visualización de la zona de datos a
vídeo inverso.
Upshift: Cambia todas las letras a mayúsculas.
Downshift: Cambia todas las letras a minúsculas.
Autonext: Avanza automáticamente el cursor al siguiente
campo cuando el campo actual está lleno.
Include: Hace que los datos sean comprobados en una
lista de valores antes de aceptarlos como
entrada. La Sintaxis es: INCLUDE=(“Valor1”,
“Valor2”,… .)
Picture: Especifica un patrón para una columna de tipo
carácter. La sintaxis es: picture=”--------… ”
donde los guiones y puntos representan
alguno de los caracteres siguientes:
A: Cualquier letra
#: Cualquier número.
X: Cualquier carácter.
Otro: Se coloca el mismo carácter
representado.
Así, el listado del formato de pantalla que, en principio solo fue modificado en
cuanto a la adición de algunos textos y algunos subrayados, puede quedar convertido
en lo siguiente:
database EJEMPLO1
screen
{
Número de empleado: [f000 ]
------------------------------
Número de Departamento: [f001 ]
------------------------------------
Extensión telefónica: [f002 ]
----------------------------
Fecha de Nacimiento: [f003 ]
-----------------------------
Fecha de Ingreso: [f004 ]
------------------------
Salario: [f005 ]
---------
Comisiones: [f006 ]
----------------
Número de Hijos: [f007 ]
-----------------------
Nombre de Empleado: [f008 ]
------------------------------
}
end
tables
temple
attributes
f000=temple.numem, autonext, Comments="Introduzca el número de empleado", Reverse,
Include=(100 to 999), Right, Noupdate, Verify;
{Esta primera zona de datos mostrará en la parte inferior de la pantalla el mensaje “Introduzca el
número de empleado“, aparecerá en vídeo inverso, solo admitirá valores desde el 100 al 999, estos
valores quedarán lineados por la derecha, no podrán ser modificados y será necesario introducirlos
dos veces para comprobar su validez. Esta línea no será visible porque está escrita entre llaves.}
f001=temple.numde, autonext, Comments="Introduzca el número de departamento del
empleado", Reverse, Include=(100 to 999), Required;
{Esta segunda zona de datos mostrará en la parte inferior de la pantalla el mensaje “Introduzca el
número de departamento del empleado“, aparecerá en vídeo inverso, solo admitirá valores desde el
100 al 999, y será necesario introducir algún valor para poder dar de alta la fila.}
f002=temple.extel, Comments="Introduzca la extensión del empleado", Reverse, autonext,
Picture="11####";
{Esta tercera zona de datos mostrará en la parte inferior de la pantalla el mensaje “Introduzca la
extensión del empleado“, aparecerá en vídeo inverso, enviará el cursor al campo siguiente
automáticamente cuando esté lleno el campo actual y exigirá como valor “11”seguido de cuatro
dígitos.}
f003=temple.fecna, autonext, Comments="Introduzca la fecha de nacimiento del empleado",
Reverse, Include=("01/01/40"to"01/01/98");
{Esta cuarta zona de datos enviará el cursor al campo siguiente automáticamente cuando esté lleno
el campo actual, mostrará en la parte inferior de la pantalla el mensaje “Introduzca la fecha de
nacimiento del empleado“, aparecerá en vídeo inverso y solo admitirá valores desde el 1/1/1940
hasta el 1/1/1998.}
f004=temple.fecin, autonext, Comments="Introduzca la fecha de entrada del empleado",
Reverse;
{Esta quinta zona de datos enviará el cursor al campo siguiente automáticamente cuando esté lleno
el campo actual, mostrará en la parte inferior de la pantalla el mensaje “Introduzca la fecha de
entrada del empleado“ y aparecerá en vídeo inverso.}
f005=temple.salar, autonext, Comments="Introduzca el salario del empleado", Reverse, Upshift;
{Esta sexta zona de datos enviará el cursor al campo siguiente automáticamente cuando esté lleno el
campo actual, mostrará en la parte inferior de la pantalla el Introduzca el salario del empleado“,
aparecerá en vídeo inverso y guardará todas las letras como mayúsculas.}
f006=temple.comis, autonext, Comments="Introduzca la comisión del empleado", Reverse,
Right;
{Esta séptima zona de datos enviará el cursor al campo siguiente automáticamente cuando esté
lleno el campo actual, mostrará en la parte inferior de la pantalla el Introduzca la comisión del
empleado“, aparecerá en vídeo inverso y alineará a la derecha los datos introducidos.}
f007=temple.numhi, autonext, Comments="Introduzca el número de hijos del empleado",
Igual que cuando se trataba de una sola tabla, Informix-SQL preguntará por el
nombre que se dese aplicar al formulario:
Una vez elegida la tabla, aparece el siguiente menú, en el cual comienzan las
diferencias respecto al caso anterior. En lugar de seleccionar Table-Selection-
Complete, hay que seleccionar la opción Select-more-Tables.:
numde [ ]
numce [ ]
direc [ ]
tidir [ ]
presu [ ]
depde [ ]
nomde [ ]
numem [ ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]
database EJEMPLO1
screen
{
numde [f000 ]
numce [f001 ]
direc [f002 ]
tidir [a]
presu [f003 ]
depde [f004 ]
nomde [f005 ]
}
screen
{
numem [f006 ]
numde [f007 ]
extel [f008 ]
fecna [f009 ]
fecin [f010 ]
salar [f011 ]
comis [f012 ]
numhi [f013 ]
nomem [f014 ]
}
end
tables
tdepto
temple
attributes
f000 = tdepto.numde;
f001 = tdepto.numce;
f002 = tdepto.direc;
a = tdepto.tidir;
f003 = tdepto.presu;
f004 = tdepto.depde;
f005 = tdepto.nomde;
f006 = temple.numem;
f007 = temple.numde;
f008 = temple.extel;
f009 = temple.fecna;
f010 = temple.fecin;
f011 = temple.salar;
f012 = temple.comis;
f013 = temple.numhi;
f014 = temple.nomem;
end
numde [ ]
numce [ ]
direc [ ]
tidir [ ]
presu [ ]
depde [ ]
nomde [ ]
numem
numde
extel
fecna
fecin
salar
comis
numhi
nomem
database EJEMPLO1
screen
{
numde [f000 ]
numce [f001 ]
direc [f002 ]
tidir [a]
presu [f003 ]
depde [f004 ]
nomde [f005 ]
numem [f006 ]
extel [f008 ]
fecna [f009 ]
fecin [f010 ]
salar [f011 ]
comis [f012 ]
numhi [f013 ]
nomem [f014 ]
}
end
tables
tdepto
temple
attributes
f000 = tdepto.numde=temple.numde;
f001 = tdepto.numce;
f002 = tdepto.direc;
a = tdepto.tidir;
f003 = tdepto.presu;
f004 = tdepto.depde;
f005 = tdepto.nomde;
f006 = temple.numem;
f008 = temple.extel;
f009 = temple.fecna;
f010 = temple.fecin;
f011 = temple.salar;
f012 = temple.comis;
f013 = temple.numhi;
f014 = temple.nomem;
end
numde [ ]
numce [ ]
direc [ ]
tidir [ ]
presu [ ]
depde [ ]
nomde [ ]
numem
extel
fecna
fecin
salar
comis
numhi
nomem
numde [ ]
numce
direc
tidir
presu
depde
nomde
numem [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]
Con los procedimientos descritos hasta aquí, se ha conseguido que dos tablas
aparezcan en el mismo formulario, pero al realizar una consulta, se observa que para
cada número de departamento solamente aparece un empleado. En realidad, lo
único que se ha descrito hasta ahora es el formato del formulario, pero en ningún
caso se le ha dicho a Informix-SQL cómo tiene que manejar los datos el formulario
creado en base a esas dos tablas. Ambas están relacionadas a través del campo
numde común a las dos. Este campo es clave principal en la primera tabla (índice
único sin nulos).
La operación que se ha de realizar en primer lugar es definir cual es la tabla
principal y cual es la asociada. Esto se realiza desde una nueva sección del
formulario que lleva el nombre de Instructions.
La sección Instructions va al final de las secciones existentes, y ha de presentar
una instrucción que defina cual es la tabla principal y cual es la asociada. La sección
completa en formato general será como la que sigue:
instructions
tabla1 MASTER OF tabla2
end
instructions
tdepto MASTER OF temple
end
Una vez definidos los status de tabla master o principal y de tabla Detail o
asociada, se compila el formulario, se almacena y se ejecuta. El resultado en pantalla
es aparentemente el mismo, pero con la particularidad de que si se activa la segunda
tabla el campo numde permanece activado, se desactiva el resto de campos de la
primera tabla y se activan todos los campos de la segunda. En esta situación, si se
realiza una consulta por número de departamento, (numde), para cada número de
departamento especificado aparecen todos los empleados que pertenecen a ese
departamento. Para pasar de un empleado a otro se utiliza la opción next o previous.
Si la primera tabla está activa, la opción detail activará la segunda tabla, y
estando activada la segunda tabla, la opción master activará la primera.
Otro problema aparte consiste en definir cómo han de funcionar los datos por lo
que se refiere a las dependencias funcionales establecidas entre ellos. Esta cuestión
toma especial relevancia a la hora de añadir datos. Por principio, no se debería poder
añadir ningún nuevo empleado sin que antes existiese el departamento al que
pertenece, o dicho de otro modo, no debe ser posible añadir un registro a la segunda
tabla si antes no existe en la primera el valor del campo a través del cual se establece
la relación. En el estado actual de la base de datos de ejemplo, es posible añadir un
empleado que pertenezca al departamento 5000, cuando en realidad éste no existe.
Estos conceptos están íntimamente ligados a la idea de integridad referencial a la
que se aludió en el capítulo correspondiente al diseño de bases de datos, y que
especificaba que, tanto los datos como su funcionamiento en el seno de la base de
datos diseñada, deben ser consistentes con la realidad. Ciertamente, un empleado
no puede pertenecer a un departamento que no existe, igual que un departamento no
puede estar situado en un centro de trabajo (edificio físico) que no existe.
Para implementar estos funcionamientos en un formulario de Informix-SQL, es
necesario añadir una sentencia que realice una verificación de datos antes de que
estos puedan ser dados de alta en la base de datos. Realmente, no se puede añadir
[f000]=depto.numde=*temple.numde
El asterisco implica que cada vez que se desee añadir nuevos datos en la
columna de la tabla 2, se realizará una verificación de forma que ese nuevo valor se
comparará con todos (*) los valores de la columna correspondiente a la tabla 1 y si no
cumple la condición de ser igual a alguno de ellos, entonces Informix-SQL emitirá un
mensaje de error y no permitirá la adición de ese nuevo registro.
Después de salir, compilar , guardar y ejecutar, se comprobará que no es
posible añadir o modificar un registro de la tabla asociada (detail) si el valor
introducido para el campo común no existe en la tabla principal.
Un tercer tipo de enlace es el llamado Enlace de referencia. Éste permite
mostrar los datos que tengan relación con aquellos que acaban de introducirse en el
campo. La sintaxis correspondiente es:
sformbld nombrearchivo.PER
sperform nombrearchivo.FRM
Esta orden ejcuta el formulario como si se hubiese realizado dentro del entorno
de Informix-SQL. Cuando todo este proceso se realiza desde el sistema de menús de
Informix, el procedimiento interno que se sigue es exactamente el mismo, pero en
este caso resulta absolutamente transparente para el usuario, ya que es el propio
Informix-SQL el encargado de llamar a estos módulos.
Informes Personalizados
Igual que en el caso de los formatos de pantalla, Informix posibilita la creación
de informes por defecto utilizando solamente las opciones correspondientes del
sistema de menús que se vieron anteriormente en este manual, pero no solo es
posible la creación de estos informes, sino que además se pueden generar informes
tan complejos como se desee, bien creándolos desde el principio utilizando un editor,
o bien creando el informe desde el sistema de menús, y luego modificándolo a través
de la utilización de ese mismo editor.
asignando un nombre:
Sección Utilización
Define: Define las variables locales que se utilizarán en el
informe.
Input: Genera mensajes de petición de entrada en informes
interactivos.
Output: Especifica:
Ø Márgenes, pie de página y encabezado.
Ø Destino del informe: Pantalla, Impresora o
Programa.
Sección Define
DEFINE
Variable [nombre variable tipodato]. Las variables son utilizadas para
permitir la entrada interactiva de ciertos valores durante la
ejecución del informe. Nombre es el nombre de la variable y
Tipodato es el tipo de datos que va a almacenar. No es
válida con los datos de tipo Serial.
Param[Integer] [nombre parámetro tipo parámetro]. Permite al usuario
definir algunos parámetros cuando se lanza la ejecución
desde el sistema operativo, y no desde la opción Run. El
entero representa el número de parámetro, nombre es el
nombre utilizado en el informe y tipo representa cualquier
tipo de datos menos los datos de tipo serial.
END
Sección Input
INPUT
Prompt For [nombre variable] Using [Cadena]. Esta sección está
estrechamente ligada a la sección
DEFINE ya que permite introducir
los valores de las variables. Nombre
variable es el nombre asignado a la
variable en la sección DEFINE.
Cadena es el texto a través del cual
Informix-SQL preguntará al usuario.
END
Sección Output
OUTPUT
Page Length [Integer]: Fija el número de líneas por página. El valor
por defecto es 66.
Right Margin [Integer]: Fija el margen derecho (ancho). El valor por
defecto es 5.
Left Margin [Integer]: Fija el margen izquierdo. El valor por
defecto es 5.
Top Margin [Integer]: Fija el margen superior. El valor por defecto
es 3 líneas.
Bottom Margin [Integer]: Fija el margen superior. El valor por defecto
es 5 líneas.
Report to [Nombre de Fichero]: Envía el contenido del informe a un fichero.
| Report to Pipe [Programa]: Envía el contenido del informe a un
programa.
| Report to Printer: Envía el contenido del informe a impresora.
END
Sección Format
Acciones de Salida
PRINT: Sintaxis: PRINT Column nº, Expresion, nº Spaces,
ASCII nº, USING Formato, Clipped. Donde:
Column nº: Especifica en que columna se presentará.
nº Spaces: Añade la salida de n espacios en blanco.
ASCII nº: Número ASCII de cualquier carácter de
control.
Clipped: Elimina los blancos a la derecha en una
columna tipo Char.
SKIP: Sintaxis: SKIP nº Lines / SKIP Top of Page. Donde:
nº Lines: Especifica que saltará el número de líneas
expresado.
Top of Page: Saltará a la primera línea de la página
siguiente. No se puede utilizar en una cabecera o pie
de página.
NEDD: Sintaxis: NEDD nº Lines. Fuerza que un determinado
número de líneas estén juntas en la misma página.
PAUSE: Sintaxis: PAUSE “Mensaje”. Interrumpe la salida del
informe y muestra mensaje hasta que se pulse una
tecla.
PRINT FILE: Sintaxis: PRINT FILE “NombreArchivo”. Envía la salida
a un fichero cuyo nombre es NombreArchivo.
Estructuras de Control
Estructura Secuencial: Las acciones son ejecutadas en la misma forma en
que son encontradas en el código. A veces es
necesario utilizar BEGIN y END.
Alternativa (If-Then-Else): Sintaxis: IF Condición THEN Acción1 ELSE Acción2.
Si se da la condición, se realizará la Acción1, en otro
caso, se realizará la Acción2.
Bucle WHILE: Sintaxis: WHILE Condición DO Acción. Se realizará la
acción todo el tiempo durante el que se cumpla
Condición.
Bucle FOR: Sintaxis: FOR Variable = ValorInicial TO Variable =
ValorFinal STEP paso DO Acción. Se realiza la Acción
mientras la variable va tomando valores desde
ValorInicial hasta ValorFinal en incrementos STEP.
Una vez que el usuario ha terminado de redactar el código necesario para que
el informe realice las acciones deseadas, Informix-SQL presenta el menú de
Modificación de Informes:
saceprep nombrearchivo.ACE
sacego nombrearchivo.ARC
Informix llevará a cabo la ejecución del informe en función de cómo éste haya
sido diseñado.
Cuando el usuario compila y ejecuta un informe desde el Sistema de menús de
Informix-SQL, el procedimiento que se sigue internamente es exactamente el mismo,
pero en este caso se lleva a cabo de forma absolutamente transparente para el
usuario, ya que es el propio Informix el encargado de llamar a los módulos saceprep y
sacego.
Menús Personalizados
A veces resulta útil crear un entorno en el que los usuarios finales solo tengan
que elegir una opción entre unas pocas que conforman un menú. En este sentido,
Informix-SQL presenta una utilidad de generación de menús que facilita al
programador esta tarea, de tal forma que se puede crear una pequeña aplicación
basada en una serie de opciones sencillas, que a su vez lleven a otra serie de
subopciones, cada una de las cuales con una operatividad concreta. Lógicamente,
para llevar a cabo este proceso, es necesario especificar cual es el texto de cada una
de las opciones, y qué operación se ha de realizar al elegirla.
La estructura del sistema de menús que se puede generar es típicamente
jerárquica. Para cada una de las opciones del menú principal, se pueden crear una
serie de subopciones y así sucesivamente. A estas opciones se les puede asignar la
ejecución de un programa, un formulario, un informe, una consulta SQL, un fichero
script, o una subopción.
----------------------------------------------SELECTION SECTION-----------------------------------
Selection number Selection Type
Selection
Text:
Selection
Action:
ESCAPE adds new data Interrupt discards it Arrows keys move cursor
adds new data to the active database table ** 1: sysmenú table **
========================MENU ENTRY FORM=====================
Menú Name Es el nombre del menú. Debe llamarse main.
Menú Title Un título cualquiera que desee agregarse al menú. Aparecerá en la parte superior
Una vez especificado el nombre del menú y el texto de la línea de título, para
añadir estos valores se pulsará Escape.
En la segunda línea del sistema de menús, aparece “**1:sysmenu table**”. En
realidad lo que se está generando, son dos tablas, una con los nombres de los
menús y otra con las opciones de cada uno de estos menús. La primera se llama
“sysmenu”, y la segunda “sysmenuitem”. Para pasar a generar las opciones de este
menú main, se utilizará la opción Table del menú principal de Informix-SQL. Al pulsar
esta opción, se activará la parte inferior de la pantalla (SELECTION SECTION). En
esta zona se identificarán cada una de las opciones del menú de usuario creado:
----------------------------------------------SELECTION SECTION-----------------------------------
Selection number Selection Type
Selection
Text:
Selection
Action:
Una vez pulsada la opción Table, se pulsará la opción Add. Esta opción
colocará el cursor en el campo Menú Name. El usuario se deberá desplazar hasta la
zona inferior de la pantalla para rellenar los campos con sus valores
correspondientes:
----------------------------------------------SELECTION SECTION-----------------------------------
Selection number Número de la Selection Type Tipo de operación que se
selección. El desee ejecutar. M:Menú, P:
primero será “1” Programa, Q: Consulta SQL,
R: Informe, F:Formulario,
S:Fichero Script.
Selection
Text: Texto que
presentará la
opción.
Selection
Action: Nombre del menú, Línea de comandos, Nombre
del Query Script, Nombre del Informe o Nombre
del Formulario.
Una vez rellenos todos los campos de esta pantalla, para salir se pulsará
Escape. Para añadir las especificaciones de la segunda opción, se pulsara otra vez la
opción Add y se repetirá todo el proceso. Al terminar, se sale del menú con la opción
Exit. Para ejecutar este menú de usuario, se elegirá la opción Run en el nuevo menú
presentado en pantalla.
En el ejemplo inferior, pantalla de especificaciones para la primera opción:
----------------------------------------------SELECTION SECTION-----------------------------------
Selection number 1 Selection Type F
Selection
Text: Primera Opción
Selection
Action: NombreForm
----------------------------------------------SELECTION SECTION-----------------------------------
Selection number 2 Selection Type R
Selection
Text: Segunda Opción
Selection
Action: NombreInfor
Variables de Entorno
Se pueden especificar variables de entorno en Informix-SQL. Si no se
establecen valores personalizados, estas variables asumen su valor por defecto.
Bibliografía
& Documentación Oficial Informix-SQL. Manual de Formación.
& Introducción a Informix-SQL. Departamento de Formación. AT&T
Microelectrónica España. Enero 1991.
& Base de Datos Relacionales. E. Rivero Cornelio. Editorial Paraninfo. 1988.
& El Modelo Relacional de Datos. C. Fernández Baizán. Ediciones Díaz de
Santos. 1987.
& SQL para usuarios y programadores. J. Benavides Abajo. Editorial
Paraninfo. 1991.
& Informix. La base de datos relacional para Unix. A. Abdellatif y A. Zeroual.
Ediciones Díaz de Santos. 1992.
& Introducción a los Sistemas de Bases de Datos. C. J. Date. Editorial
Addison-Wesley Iberoamericana. 1986.
& Using Informix-SQL. Jonathan Leffler. Editorial Addison-Wesley Publishing
Company. 1991.