You are on page 1of 70

SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Indice
INDICE...................................................................................................................................... 1

BASES DE DATOS. SGDB....................................................................................................... 3


CONCEPTO DE BASE DE DATOS Y MODELO DE DATOS ................................................................ 3
MODELOS DE DATOS ................................................................................................................ 3
Modelo Jerárquico.............................................................................................................. 4
Modelo Red o Distribuido................................................................................................... 4
Modelo Objeto.................................................................................................................... 4
EL MODELO RELACIONAL......................................................................................................... 4
Relación. Tupla. Registro. Atributo..................................................................................... 4
Base Matemática. Dominio................................................................................................. 4
Clave .................................................................................................................................. 4
Componentes del Modelo Relacional .................................................................................. 5
Operadores......................................................................................................................... 5
Definiciones de Integridad.................................................................................................. 6
Reglas de Integridad........................................................................................................... 6
Lenguajes Relacionales ...................................................................................................... 6
DISEÑO DE UNA BASE DE DATOS ............................................................................................... 6
Etapas ................................................................................................................................ 6
Proceso de Normalización. Formas Normales..................................................................... 9
SISTEMAS DE GESTIÓN DE BASES DE DATOS .............................................................................. 9
SISTEMAS DE BASES DE DATOS ............................................................................................... 10
INFORMIX-SQL .................................................................................................................... 10
GENERALIDADES SOBRE INFORMIX-SQL ................................................................................. 10
Historia ............................................................................................................................ 10
Definición......................................................................................................................... 11
Arquitectura ..................................................................................................................... 11
SISTEMA DE MENÚS ................................................................................................................ 12
Menú Principal:................................................................................................................ 12
Funcionamiento del Menú Principal de Informix .............................................................. 12
Utilidad de cada una de las opciones del menú Principal de Informix: ............................. 12
CREACIÓN DE UNA BASE DE DATOS ......................................................................................... 13
Opción del sistema de menús. Procedimiento.................................................................... 13
CREACIÓN DE TABLAS ............................................................................................................ 14
Opción del sistema de menús ............................................................................................ 15
Reglas para crear Nombres de Campos ............................................................................ 16
Tipos de Datos.................................................................................................................. 17
Índices .............................................................................................................................. 18
Valor Null......................................................................................................................... 18
Tablas Ejemplo................................................................................................................. 19
CREACIÓN DE UN FORMATO DE PANTALLA PARA AÑADIR DATOS ................................................ 20
Generación automática de Formatos de Pantalla. Perform............................................... 20
EJECUCIÓN DE CONSULTAS ..................................................................................................... 24
Tipos de Consultas............................................................................................................ 24
Ejecución consultas QBE desde Informix-SQL.................................................................. 24
Consultas de datos que no han de cumplir ninguna condición........................................... 24
Consultas de datos que han de cumplir alguna condición ................................................. 25
CREACIÓN DE UN INFORME...................................................................................................... 27
Generación automática de Informes. ACE ........................................................................ 27
RDSQL .................................................................................................................................... 28
Escritura de Consultas SQL desde Informix-SQL .............................................................. 28
Lenguaje RDSQL. Consultas de selección sin condiciones................................................ 29

Manual de Informix-SQL Pág. 1 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Exportar datos a Impresora o a Fichero ........................................................................... 31


Consultas con definición de condiciones........................................................................... 32
Funciones Agregadas........................................................................................................ 36
Cláusula GROUP BY ........................................................................................................ 37
Envío de los resultados de una consulta a una nueva tabla ............................................... 37
Establecimiento de relaciones entre tablas. ...................................................................... 38
FORMATOS PERSONALIZADOS ....................................................................................... 40
Creación de un Formato Personalizado Monotabla .......................................................... 40
Estructura de la especificación de formulario................................................................... 41
Secciones de la especificación de formulario .................................................................... 42
Creación de Formatos Multitabla ..................................................................................... 47
Formularios generados desde el Sistema Operativo .......................................................... 55
INFORMES PERSONALIZADOS......................................................................................... 56
Creación y modificación de un Informe ............................................................................ 56
Secciones de un Informe ACE ........................................................................................... 57
Sección Define.................................................................................................................. 59
Sección Input .................................................................................................................... 59
Sección Output ................................................................................................................. 59
Sección Format................................................................................................................. 60
Acciones Ejecutables en un Informe.................................................................................. 60
Ejemplos de Listados de Informes ..................................................................................... 63
Informes Creados desde el Sistema Operativo................................................................... 63
MENÚS PERSONALIZADOS................................................................................................ 63

VARIABLES DE ENTORNO................................................................................................. 67

CATÁLOGOS DEL SGBD INFORMIX................................................................................ 69

BIBLIOGRAFÍA..................................................................................................................... 69

Manual de Informix-SQL Pág. 2 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Bases de Datos. SGDB

Concepto de Base de Datos y Modelo de Datos


Una base de datos se puede definir como una colección de datos almacenados
por un largo período de tiempo y estructurados de tal forma que se puedan gestionar
fácilmente (J. Leffler, 1989). Así, una base de datos en sentido amplio, funcionaría
como un depósito donde se almacenan esos datos. Un ejemplo de base de datos
perfectamente válido podría ser el conjunto de tarjetas que guardan información
acerca de los libros existentes en una biblioteca. Estas tarjetas pueden estar
duplicadas en diferentes archivos de forma que en la parte superior de cada una de
ellas aparezca el autor (para poder realizar búsquedas por autor). En la parte superior
de otro conjunto de tarjetas duplicado del primero podría aparecer el título del libro
(para poder realizar búsquedas por títulos) y así sucesivamente. El hecho concreto es
que siempre se estaría almacenando la misma información, pero organizada de
diferentes formas para poder ser consultada según diferentes contenidos. Si estos
conjuntos de tarjetas se esparcieran por el suelo simplemente volcando los cajones
que las contienen, seguramente nadie duda de que los datos guardados seguirían
siendo los mismos, pero dejarían de constituir una base de datos ya que no existiría
ninguna estructura que posibilitase su manejo. Este autor distingue entre los
conceptos de datos e información, basándose en que la información es la base para
la toma de decisiones y los datos son los valores registrados. Podría interpretarse
que la información es el significado de los datos para el usuario. De esta forma, si los
datos no son accesibles, no pueden proporcionar información.
Otra definición un tanto mas abstracta es la propuesta por A. Abdellatif y A.
Zeroual en 1991: Una base de datos es un conjunto integrado de datos que
modelizan un universo concreto formado por objetos interrelacionados y en el que los
objetos de un mismo tipo constituyen una entidad y el lazo entre diferentes entidades
constituye una asociación.

El proceso de modelizar entidades y asociaciones se llama modelización y se


realiza siguiendo un modelo de datos. Un modelo de datos es un sistema formal y
abstracto que permite describir los datos de acuerdo con unas reglas y convenios
predefinidos (E. Rivero, 1988). Los modelos de datos se diferencian en la
representación de las asociaciones y en las operaciones aplicables a las entidades y
asociaciones.

Un modelo de datos siempre presenta tres componentes (E. Rivero, 1988):

Estructura de Datos: Colección de objetos abstractos formados por


datos.
Operadores entre las Operadores que permiten manipular las estructuras.
estructuras:
Definiciones de Integridad: Conjunto de conceptos y reglas que permiten
expresar que valores de datos pueden aparecer
válidamente en el sistema.

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.

Manual de Informix-SQL Pág. 3 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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 Red o Distribuido


En este modelo son posibles todos los tipos de lazos (N:M). Una entidad recibe
el nombre de Tipo de Registro y esta compuesta de items. Un lazo entre dos
entidades se denomina Tipo Conjunto y comprende un tipo de registro llamado
Propietario y otro llamado Miembro. (Especificaciones del grupo DBGT del comité
CODASYL).

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

Relación. Tupla. Registro. Atributo


Propone datos almacenados en tablas, donde las filas son llamadas registros,
tuplas o n-tuplas y las columnas campos o atributos. Cada una de estas tablas es un
caso especial de la construcción conocida en matemáticas como relación, término
que presenta una definición mucho mas precisa que la de tabla o archivo.

Base Matemática. Dominio


Matemáticamente, una relación es un subconjunto finito del producto cartesiano
de una serie de dominios, donde dominio es cualquier conjunto finito o infinito. A cada
dominio que participa en una relación se le da un nombre que lo identifica de forma
única en esa relación, de tal manera que una tupla puede definirse como una lista
ordenada de valores V1, V2, V3, … VN donde V1 es el valor del primer dominio, V2 es el
valor del segundo dominio, etc. Estos valores V1, V2, V3, … VN son los atributos. (E.
Rivero, 1988).

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.

Manual de Informix-SQL Pág. 4 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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).

Por otra parte, frecuentemente en la literatura y el software se utiliza la palabra


tabla como sinónimo de relación; renglón o registro como sinónimo de tupla y campo
como sinónimo de atributo. (C. J. Date, 1975). Cada atributo está designado por un
nombre y caracterizado por un dominio. Un dominio es un tipo de datos con nombre
(A. Zeroual, 1991). Dominio también se puede definir como un conjunto o depósito de
valores del cual se sacan los que aparecen en una columna específica (C. J. Date,
1975). Estos conceptos están íntimamente ligados con su significado matemático,
expresado en el párrafo anterior.

Componentes del Modelo Relacional


Según se vio anteriormente, todo modelo de datos presenta una serie de
componentes. En el caso del modelo relacional, estos componentes son:

Estructura de Datos Dominios, Relaciones, Atributos, Tuplas


Operadores Propios del álgebra relacional, es decir, unión,
diferencia, producto cartesiano, proyección y
selección.
Definiciones de Integridad Concepto de claves y posibilidad de valores nulos.
Reglas de Integridad Integridad de claves primarias. Integridad
Referencial.

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.

Manual de Informix-SQL Pág. 5 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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:

Estabilidad: Considerar si alguna de las claves es menos propensa a sufrir


modificaciones en sus valores.
Facilidad de uso: Siempre es mas fácil manejar una clave numérica corta que una
alfanumérica de muchos caracteres de longitud.
Fiabilidad: Comprobar la existencia de alguna clave que presente dígitos de
validación u otros sistemas de autodetección o corrección de
errores.
Universalidad: Pueden existir claves de uso muy extendido. (NIF, Número de
Seguridad Social… )

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.

SQL, propuesto inicialmente bajo el nombre de SQUARE y posteriormente


SEQUEL, fue desarrollado para el sistema R (Prototipo de SGBD relacional de IBM).

QUEL fue desarrollado por la universidad de Berkeley para el SGBD Ingres.

QBE (Query by Example), desarrollado por IBM y concebido para usuarios


finales con pocos conocimientos sobre Bases de Datos. Está considerado como el
primero de los gestores de formatos de pantalla y se basa en rellenar campos
predefinidos en una pantalla.

Diseño de una Base de Datos

Etapas

Manual de Informix-SQL Pág. 6 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Planificación: Alcance del diseño: Se plantea el alcance global del diseño de la


base de datos, es decir, se definen los límites precisos del sistema
que se va a representar mediante la base de datos.
Restricciones del diseño: Estas restricciones pueden estar
relacionadas directamente con la cuestión financiera, con el
hardware, con el software o con los usuarios.
Planificación de cambios: El diseñador debe tener en cuenta que
existe la posibilidad de que, durante el ciclo de vida de la base de
datos, surjan cambios. Estos cambios pueden estar relacionados
con el sistema que representa la base de datos, con el hardware,
con el software, con los usuarios o con la propia base de datos. El
diseño de estar realizado de forma que tanto alteraciones en los
datos existentes como crecimiento de la información o cambios en
el mismo diseño de la base de datos puedan ser implementados de
la forma mas sencilla posible.
Estudio de los Un estudio detallado de las necesidades de los usuarios
requerimientos determinará esencialmente que descenderá el número de
del usuario: modificaciones que se habrán de realizar a posteriori. La
información de las necesidades de los usuarios puede estar
organizada de la siguiente forma:
Una lista de todos los informes que necesitarán los usuarios,
Una lista de todos los posibles tipos de preguntas que los usuarios
necesitarán realizar a la base de datos.
Una lista de los datos que son significativos para los usuarios, con
el nombre que se habrá de dar a esos datos. Este nombre tendrá
que ser aceptado por todos los usuarios.
Diseño Es una construcción abstracta que representa el sistema real, y es
Conceptual: absolutamente independiente de cualquier sistema de gestión de
bases de datos. En este sentido, funciona de forma diferente al
diseño físico. El diseño físico sí que ha de tener en cuenta el SGBD
sobre el que se va a trabajar. Las herramientas de las que dispone
el diseñador para organizar sus ideas son las siguientes:
Tipos de Entidad: Cada entidad debe representar un grupo de
objetos o sucesos similares y se utilizan para representar distintas
clases de aspectos de la realidad.
Atributos: Un tipo de entidad representa un conjunto de objetos
utilizando las características de interés de esos objetos. Las
características mas fáciles de representar de los objetos son los
números, ya que son los tipos de caracteres que mejor maneja
cualquier ordenador. Los atributos están a su vez, determinados por
una serie de cualidades que pueden tomar diferentes valores. Las
cualidades de los atributos son las siguientes:
Nombre: A cada uno de los atributos se le debe asociar un nombre
único, escogido de forma que indique la característica del tipo de
objetos representados por el tipo de entidad. La mayoría de SGBD
permite un número de caracteres lo suficientemente alto como para
poder asignar un nombre que cumpla estos requerimientos.
Además, algunos SGBD permiten la utilización de múltiples
nombres o sinónimos para un mismo atributo.
Tipo: Los SGBD solo permiten un número reducido de tipos de

Manual de Informix-SQL Pág. 7 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

atributos (como pueda ser numérico y cadena. Estas limitaciones


han de ser tenidas en cuenta durante el proceso de diseño
conceptual, en el caso de que el diseñador sepa que SGBD se va a
utilizar en la implementación real. Los tipos mas frecuentes son:
numérico, de cadena de caracteres, fecha, lógico y memo.
Requerido u opcional: Especifica si es necesario o no introducir
valores para ese atributo.
Ocurrencia simple o múltiple: Especifica si el atributo puede tener
un único valor, o puede tomar múltiples valores.
Elección de Tipos de Entidad y Atributos: El sistema debe estar
representado por un número suficiente de tipos de entidad y por sus
correspondientes atributos de forma que la representación de la
base de datos pueda almacenar y devolver una cantidad de
información adecuada.
Relaciones o Asociaciones: Se asume aquí el significado de
relación en el sentido de asociación, descrito anteriormente. Según
los autores, relación puede utilizarse como representación
matemática del concepto de tabla, o como asociación. En este
último sentido, están íntimamente ligadas a la consistencia de los
datos y a la recuperación de los datos en caso de consulta. Las
relaciones son fundamentalmente de tres tipos: Uno a varios, en la
que a un registro de una tabla, le puede corresponder un número
indeterminado de registros de la otra. Uno a uno, en la que a un
registro de una tabla le corresponde directamente un solo registro
de otra tabla y que es un caso especial de la relación Uno a Varios.
Varios a varios, en la que a varios registros de una tabla les pueden
corresponder un número indeterminado de registros de la otra tabla.
Las claves, y en particular, la clave primaria o principal, juegan un
papel destacado en las relaciones, ya que un valor específico de la
clave en la tabla principal define automáticamente una serie de
valores en la tabla asociada (donde este atributo no es clave
principal). Un caso especial de relaciones son las relaciones
recursivas que se dan dentro de una misma tabla.
Restricciones: Las relaciones pueden estar sujetas a ciertos tipos
de restricciones. Estos tipos son: Restricciones sobre los valores de
atributos determinados, Restricciones sobre dos o mas atributos de
una misma tabla o entidad y Restricciones sobre los atributos de
dos o mas entidades.
Atributos Derivados: Este tipo de atributos obtienen su valor no de
forma directa, sino a través de algún tipo de calculo determinado.
Diseño Físico: En esta etapa, el diseño conceptual se transforma en modelo físico
de la base de datos. Se trata de un diseño consistente con el
sistema de gestión de bases de datos que se va a utilizar. Equivale
a la traducción de un diagrama de flujo a un lenguaje concreto
como Pascal o Cobol.
Implementación El modelo físico se introduce en el SGBD sobre el que va a trabajar.
del diseño: Sería el equivalente a la introducción del programa en el ordenador.
Pruebas: Se prueba el diseño implementado para comprobar que el SGBD
funciona de la forma apropiada

Manual de Informix-SQL Pág. 8 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Proceso de Normalización. Formas Normales


Habiendo estudiado el modelo conceptual de un universo dado, el siguiente
paso consiste en traducir dicho diseño a un conjunto de tablas relacionales. Es
importante saber que tablas mal diseñadas producirán problemas predecibles en la
gestión de datos. Para eliminar estos problemas, se ha desarrollado una técnica
sistemática para la traducción de un modelo conceptual a un conjunto de tablas
relacionales correctamente diseñadas. Esta técnica recibe el nombre de
Normalización. El núcleo de esta técnica consiste en un conjunto de definiciones para
cada tipo de entidad. Estas definiciones reciben el nombre de Formas Normales.

Forma Normal Definición


Primera Forma Normal Una tabla está en Primera Forma Normal si:
1. No Existen dos filas idénticas.
2. Cada entrada de la tabla contiene un único valor.
La primera de las características de las tablas en
Primera forma normal es coherente con lo que anteriormente
se estudió respecto a que un determinado atributo no podía
repetir su valor para dos filas diferentes (Concepto de Clave
Principal o Primaria).
En el segundo caso se determina que una intersección
Fila / Columna no puede adoptar mas de un valor, es decir,
un atributo para una determinada fila, ha de tener un valor
único.
Segunda Forma Una tabla está en Segunda Forma Normal si:
Normal 1. Está en Primera Forma Normal.
2. Cuando todos los atributos no principales presentan
dependencia funcional total respecto de cada una de las
claves.
Se dice que un atributo es funcionalmente dependiente de
otro si conocido valor del segundo, se identifica al primero.
Tercera Forma Normal Una tabla está en Tercera Forma Normal si:
1. Está en Segunda Forma Normal
2. Ningún atributo no principal depende transitivamente de
ninguna clave.
Dependencia Transitiva: Si un atributo determina
funcionalmente al segundo y éste determina funcionalmente
a un tercero, entonces el primero determina funcionalmente
al tercero.
Forma Normal de Una tabla está en Forma Normal de Boyce-Codd si:
Boyce-Codd 1. Está en Tercera Forma Normal
2. Cada determinante es, o bien la clave, o bien una clave
alterna.

Sistemas de Gestión de Bases de Datos


Entre la base de datos física y los usuarios del sistema existe un nivel de
software que recibe el nombre de Sistema de gestión de Bases de Datos o SGBD.

Manual de Informix-SQL Pág. 9 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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.

Sistemas de Bases de Datos


Un Sistema de Bases de Datos es un sistema de mantenimiento de registros
basado en computadoras y cuyo propósito general es registrar y mantener
información. Incluye una serie de componentes clave: Datos, Hardware, Software y
Usuarios.

Datos Una base de datos se puede definir como un repositorio de datos


almacenados, y en general es tanto integrada como compartida.
Integrada porque puede considerarse como una unificación de varios
archivos, y compartida porque ofrece la posibilidad de que varios usuarios
accedan al mismo tiempo a esos datos.
Hardware El hardware se compone de los volúmenes de almacenamiento donde se
encuentra la base de datos, junto con sus dispositivos de control,
canales, etc.
Software Analizado en el apartado anterior. Responde al concepto de SGBD.
Usuarios Se consideran tres clases principales de usuarios: Programador de
aplicaciones, Administrador de bases de datos y el Usuario final. El
primero es el encargado de diseñar y generar programas de aplicación. El
segundo es el encargado de controlar los permisos de acceso, y en
general, de las labores de configuración y mantenimiento con el objetivo
de que tanto la seguridad como el rendimiento están garantizados en todo
momento. El tercero opera con la base de datos a nivel de terminal. Éste
puede utilizar un lenguaje de consulta proporcionado como parte integral
del sistema.

Informix-SQL

Generalidades sobre 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.

En 1984 RDS anuncia Informix-SQL. Procede de la versión anterior de Informix


en la que se ha reemplazado el antiguo lenguaje de consultas -INFORMER- por SQL
debido a que éste último se había convertido en el lenguaje de referencia de los
sistemas relacionales modernos.

Manual de Informix-SQL Pág. 10 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

El nombre RDS perduró hasta 1986, año en que la compañía cambió de


nombre para convertirse en Informix, reflejando de este modo el nombre de los
productos por los que era mas conocida.

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.

Informix-SQL consta de un servidor de datos, un generador de informes (ACE),


un generador de formatos de pantalla (PERFORM), un editor SQL interactivo y un
generador de menús para personalizar aplicaciones.

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.

Un generador que permite la creación y utilización de informes. ACE es la


herramienta que permite generar estos informes. Como en el caso de PERFORM,
los informes mas sencillos se pueden generar de un modo interactivo, mientras
que para crear los mas sofisticados es necesario recurrir a un lenguaje.

Un generador de menús que permite personalizar las aplicaciones. Estos


menús que el usuario puede generar son capaces de integrar todos los módulos
generados por las herramientas descritas anteriormente.

Manual de Informix-SQL Pág. 11 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

El tercer nivel está formado por la interface de usuario. A través de esta


interface, los usuarios pueden acceder con facilidad a las diferentes utilidades de
Informix-SQL. Esta interface está basada en la utilización de menús jerárquicos
desplegables.

Sistema de menús

Menú Principal:

INFORMIX-SQL: Form Report Query-Language User-Menu Database Table Exit


Run, Modify, Create or Drop a Form
-------------------------------------------------------------------------Press F1 for Help--------------------------------

Funcionamiento del Menú Principal de Informix


En Informix, el Menú Principal está formado por dos líneas horizontales. La
línea superior es la línea de opciones. La Línea inferior del menú presenta una ayuda
referida a la opción seleccionada de la línea superior. Para seleccionar una opción
cualquiera es suficiente con pulsar las teclas de las flechas izquierda y derecha en el
teclado. La opción correspondiente aparecerá en vídeo inverso y en la línea inferior
aparecerá un mensaje de ayuda referido a dicha opción.
Otra forma de seleccionar una opción es pulsar la tecla correspondiente a la
inicial de esa opción. En este caso, la opción se seleccionará automáticamente y no
dará lugar a ver el mensaje de ayuda, apareciendo en su lugar las subopciones
correspondientes a la opción principal seleccionada.
Por otra parte, ejecutando la combinación de teclas CONTROL-W, o en otros
casos F1, se accede a una pantalla de ayuda. Esta pantalla presenta a su vez dos
opciones en el menú: Screen permite pasar a la página siguiente y Resume finaliza la
ejecución de la ayuda.

Utilidad de cada una de las opciones del menú Principal de Informix:

Form Entra en el conjunto de menús Perform. A través de estos menús se


pueden crear y ejecutar formatos de pantalla. Estos formatos pueden
ser utilizados para realizar operaciones con los datos sin necesidad de
repetir o, en su caso, conocer sentencias SQL.
Report Permite acceder al menú ACE. ACE es el generador de informes de
Informix. A través de este sistema de menús se pueden crear y
ejecutar informes definidos por el usuario.
Query Accede al sistema de menús Query Language. Permite realizar
Language operaciones a partir de sentencias redactadas en lenguaje RDSQL.
RDSQL es la implementación de la norma SQL realizada por Informix.
User-Menu Permite crear un menú personalizado cuyas opciones, a su vez,
permitan acceder a formatos de pantalla, informes, etc.
Database Permite realizar las operaciones principales con una base de datos:
Seleccionar, Crear, Borrar…

Manual de Informix-SQL Pág. 12 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Table Permite acceder a un sistema de menús que posibilitan la realización


de operaciones relacionadas con tablas.
Exit Termina la ejecución de Informix-SQL.

Las subopciones correspondientes a cada una de estas opciones del menú


principal se estudiarán en su orden correspondiente. En todo caso, a continuación
aparece un cuadro con las opciones de segundo orden para cada una de las
opciones principales. Cuando se elige una de estas opciones de segundo orden, en
general Informix pasa a permitir que el usuario elija el objeto sobre el que desea
ejecutar la acción, o en su caso, le asigne un nombre. En algunas de estas pantallas,
(Las que no presentan opción Exit), para salir sin añadir ningún dato se puede pulsar
Control-c.

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

Creación de una Base de Datos

Opción del sistema de menús. Procedimiento

INFORMIX-SQL: Form Report Query-Language User-Menu Database Table Exit


Select, Create, or Drop a Database.

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.

Manual de Informix-SQL Pág. 13 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Una vez pulsada la combinación de caracteres “isql” en el prompt del sistema


operativo, aparece la pantalla de presentación de Informix-SQL, y a continuación la
pantalla principal con el menú en su parte superior. Para crear una base de datos, se
elegirá la opción Database, bien seleccionándola utilizando las teclas de movimiento
de cursor y pulsando Enter, o bien simplemente pulsando la letra inicial de la opción,
en este caso, la letra d.
Automáticamente, aparecerá el menú correspondiente a la opción
seleccionada del menú principal. Para la opción Database, el menú de Informix
presenta las siguientes subopciones:

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.

Manual de Informix-SQL Pág. 14 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Opción del sistema de menús

INFORMIX-SQL: Form Report Query-Language User-Menu Database Table Exit


Create, Alter, or Drop a database Table.

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:

TABLE: Create Alter Info Drop Exit


Create a new table

La utilización de las opciones es la siguiente:

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.

Una vez seleccionada la opción Create, Informix pregunta por el nombre de la


tabla.

Create Table>>
Enter the table name you wish to create with the schema editor.

El nombre de una tabla debe cumplir los siguientes requisitos:

Ø Máximo de 18 caracteres de los cuales, los 7 primeros han de ser


diferentes a los de los nombres de otras tablas.
Ø Debe empezar por un carácter alfabético.
Ø Debe contener letras, números y guiones de subrayado.
Ø No existe diferencia entre mayúsculas y minúsculas.
Ø No se pueden utilizar palabras reservadas de Informix-SQL.

La base de datos contendrá tres tablas destinadas a guardar datos de


empleados, datos de los departamentos donde trabajan los empleados y situación
física del puesto de trabajo. Como se ha visto anteriormente, la información dentro de
una tabla está distribuida en diferentes Campos o Atributos. Cada atributo debe tener
un tipo asociado (Conjunto de valores posibles que puede tomar dicho atributo).

Manual de Informix-SQL Pág. 15 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Create Table>> temple Add Modify Drop Screen Exit


Adds Columns to the table above the line with the highlight
-----Page 1 of 1-----------------------------------------MANUAL---------------------Press F1 for Help-------
Column Name Type Lenght Index Null

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.

Al seleccionar la opción Add, la pantalla se divide en dos paneles. En el panel


superior van apareciendo las opciones de que se dispone al rellenar los espacios del
panel inferior. La primera operación consistirá en asignar nombre al primer campo.

Add Name >>


Enter Column name. Enter adds it. Interrupt returns to CREATE / ALTER menu
-----Page 1 of 1-----------------------------------------MANUAL---------------------Press F1 for Help-----------
Column Name Type Lenght Index Null

Reglas para crear Nombres de Campos


Los nombres de columnas siguen las mismas convenciones que los nombres
de tablas. También deben cumplir las siguientes reglas:

Ø Los nombres de campo deben ser únicos en una tabla.


Ø El mismo nombre puede ser usado en diferentes tablas

Una vez añadido el nombre de la columna, el siguiente paso es especificar el


tipo de datos que será almacenado en esa columna.

Add Type temple: Char Numeric Serial Date Money


Permits any combination of letters, numbers and symbols
-----Page 1 of 1------MANUAL-----Press F1 for Help
Column Name Type Lenght Index Null
nomem

Manual de Informix-SQL Pág. 16 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Tipos de Datos
Básicamente, solo existen dos tipos de datos: Alfanuméricos y Numéricos.

Tipo Declaración Descripción


Alfanumérico CHAR(Longitud) Almacenan cualquier combinación de letras,
dígitos y caracteres especiales. Se debe
especificar una longitud máxima. La longitud
máxima permitida en Informix-SQL es de
32767 caracteres.
Numérico SMALLINT Almacena números enteros entre -32.767 y
+32.767
INTEGER Almacena números enteros entre -
2.147.483.647 y +2.147.483.647
SERIAL Almacenados como INTEGER. Son números
asignados automáticamente por RDSQL. Por
defecto una columna de este tipo comienza
por 1, pero se le puede asignar un valor inicial
diferente,
SMALLINTFLOAT Almacena números en punto flotante con 8
dígitos significativos.
FLOAT Almacena números en punto flotante con 16
dígitos significativos.
DECIMAL(precisión, Almacena números en punto flotante con 32
escala) dígitos significativos.
Precisión: Es el número total de dígitos.
Escala: Es el número total de dígitos después
del punto de decimal.
Por defecto es 16, 2
MONEY Almacenado como DECIMAL.
Se muestran dos dígitos después del punto
decimal.
Es precedido por el carácter monetario $ o por
el símbolo definido en la variable de entorno
DBMONEY
DATE Almacenado como un INTEGER.
Representa el número de días desde el 31 de
Diciembre de 1.899. Así, el 1-1-1900 es +1.

A continuación se establece la longitud deseada para ese campo.

Add Length >>


Enter Column length. Return adds it.
-----Page 1 of 1------MANUAL-----Press F1 for Help
Column Name Type Lenght Index Null
nomem Char 20

Manual de Informix-SQL Pág. 17 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

El siguiente paso es especificar si se define esa columna como índice o no.

Add Index temple: Yes No


Specifies that this column will have an index.
-----Page 1 of 1-----------------------------------------MANUAL---------------------Press F1 for Help--------
Column Name Type Lenght Index Null
nomem Char 20

Í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:

Ø Se usa frecuentemente la columna para búsquedas y clasificación.


Ø La columna se utiliza para enlazar dos o mas tablas.
Ø Se quiere asegurar entradas únicas en la columna.

No se deberá definir un índice en una columna cuando:

Ø No se pueden indexar columnas cuya longitud total exceda de 120


bytes.
Ø Grandes columnas alfanuméricas.
Ø Columnas que contengan un gran número de valores duplicados.
Ø No es recomendable utilizar un índice cuando la tabla contenga
menos de doscientas filas.

En última instancia, es necesario especificar si esa columna va a permitir


valores nulos o no.

Add Nulls temple: Yes No


Permits null values in this column.
-----Page 1 of 1-----------------------------------------MANUAL---------------------Press F1 for Help---------
Column Name Type Lenght Index Null
nomem Char 20

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

Manual de Informix-SQL Pág. 18 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

desconocidos en una columna y se pueden utilizar para cualquier tipo de datos. No


representa lo mismo una intersección Fila / Columna en la que no se ha añadido
ningún valor (null), que una en la que se haya introducido un valor cero o un valor
espacio en blanco.
Estas operaciones se repetirán para cada uno de los campos de la tabla.
Cuando todas las especificaciones de los campos hayan sido introducidas, control-c
permitirá al usuario acceder al menú anterior, y la opción Exit proporcionará un menú
en el que se confirmarán o no los cambios realizados.

Exit temple: Build-new-table Discard-new-table


Builds a new table and returns to the table menu.
-----Page 1 of 1------MANUAL-----Press F1 for Help
Column Name Type Lenght Index Null
nomem Char 20 Yes

Eligiendo la opción Build-a-new-table esas especificaciones serán confirmadas


y la tabla será construida.

Tablas Ejemplo
Las tablas que van a ser utilizadas en este manual presentan la siguiente
estructura:

Tabla: temple (Datos de Empleados)


Nombre Tipo Longitud Indice Nulo Descripción
numem integer yes no Número de empleado.
numde integer no yes Número de Departamento.
extel smallint no yes Extensión telefónica.
fecna date no yes Fecha de Nacimiento.
fecin date no yes Fecha de ingreso.
salar decimal 8,0 no yes Salario mensual.
comis decimal 8,0 no yes Comisión mensual.
numhi smallint no yes Número de hijos.
nomem char 20 no yes Nombre del empleado.

Tabla: depto (Datos de Departamentos)


Nombre Tipo Longitud Indice Nulo Descripción
numde Integer Yes No Número de Departamento.
numce Integer Número de centro de
trabajo donde está el
departamento.
direc Integer Número del empleado que
es el director de
departamento.
tidir Char 1 Tipo de Director. P:
Propiedad, F: Funciones.

Manual de Informix-SQL Pág. 19 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

presu Decimal Presupuesto anual del


departamento.
depde Integer Número de departamento
del que depende.
nomde Char 20 Nombre del departamento.

Tabla: tcentr (Datos de Centros de trabajo)


Nombre Tipo Longitud Indice Nulo Descripción
numce Integer Yes Número de centro de
trabajo donde está el
departamento.
nomce Char Nombre del centro de
trabajo.
senas Char Dirección del centro de
trabajo.

Creación de un formato de pantalla para añadir datos


Una vez creadas las tablas, la siguiente operación consistirá en añadir datos a
esas tablas, para lo cual Informix-SQL proporciona el menú PERFORM. Perform es
una utilidad que genera automáticamente formatos de pantalla a través de los cuales
el usuario puede añadir o modificar datos sin necesidad de tener conocimiento
alguno sobre ningún lenguaje de manipulación de datos.

Generación automática de Formatos de Pantalla. Perform


Para generar un formato de pantalla, se elige la opción Form del menú
principal.

INFORMIX-SQL: Form Report Query-Language User-Menu Database Table Exit


Run, Modify, Create, or Drop a Form

Una vez seleccionada esa opción, aparece el siguiente menú:

FORM: Run Modify Generate New Compile Drop Exit


Use a form to enter data or query a database.

El significado de cada una de estas opciones es el siguiente:

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.

Manual de Informix-SQL Pág. 20 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

New Permite crear un formulario desde un editor de texto. Es necesario


conocer las especificaciones propias de ese tipo de fichero. Esta
cuestión se abordará en este manual en un capítulo posterior.
Compile Cuando se genera o modifica un formulario desde la opción New, es
necesario compilarlo después de su creación. Este procedimiento se
realiza desde esta opción.
Drop Elimina una especificación de Formulario existente.
Exit Regresa al menú anterior.

Al elegir la opción Generate, Informix-SQL pregunta por el nombre que se


desea dar a esa especificación de formulario.

GENERATE FORM >>


Enter the name you want to assign to the form, then press Enter.
-----Page 1 of 1-----------------------------------------MANUAL---------------------Press F1 for Help---------

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.

CHOOSE TABLE >>


Choose the table to be used in the default form.
-----Page 1 of 1-----------------------------------------MANUAL---------------------Press F1 for Help---------

Una vez especificada la tabla, Informix-SQL pregunta si se desea utilizar toda la


tabla, o seleccionar otras tablas a través del siguiente menú:

GENERATE FORM: Table-Selection-Complete Select-more-Tables Exit


Continue creating a default form with the selected tables.
-----Page 1 of 1-----------------------------------------MANUAL---------------------Press F1 for Help----------

El significado de cada una de estas opciones es el siguiente:

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.

Se seleccionará la opción Table-selection-Complete, Informix-SQL creará el


formulario, y dejará al usuario en el menú de formulario. Si se desea ejecutar el
formulario para comenzar a añadir datos a la tabla, se debe elegir la opción Run y
especificar el nombre del formulario que se desea ejecutar.

Manual de Informix-SQL Pág. 21 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Una vez seleccionada la opción Run, Informix-SQL presenta el siguiente menú


en pantalla. Desde este menú se pueden añadir datos y realizar consultas. En este
apartado el manual se limitará a estudiar cómo se pueden añadir estos datos. En el
siguiente capítulo se estudiará como se pueden realizar consultas.

PERFORM: Query Next Previous Add Update Remove Table Screen Current

Master Detail Output Exit

El significado de cada una de estas opciones es el siguiente:

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.

Una vez seleccionada la opción Run y el formulario que se desea ejecutar, el


aspecto de la pantalla es el siguiente:

Manual de Informix-SQL Pág. 22 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 1: temple table **

numem [ ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]

En la pantalla, los nombres que aparecen a la izquierda representan los


nombres de los campos, y las zonas que aparecen entre corchetes, el lugar donde se
han de introducir los datos que se incluirán en esos campos.
A través de la opción Add, el cursor se sitúa en el primer campo (especificado
entre corchetes) y posibilita la introducción de datos.
Existen una serie de combinaciones de teclas que facilitan el movimiento por
estos campos:

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.

Manual de Informix-SQL Pág. 23 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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.

Ejecución consultas QBE desde Informix-SQL


Cuando se necesita obtener algunos datos de los almacenados en las tablas,
se pueden dar dos situaciones: que esos datos conformen la totalidad de la tabla (es
decir, no tengan que cumplir ninguna condición especial) o bien que el usuario
necesite encontrar solamente aquellos datos que cumplan una condición
especificada mas o menos compleja.

Consultas de datos que no han de cumplir ninguna condición


Una vez activada la base de datos que contiene las tablas a las cuales se
desea realizar la consulta, el usuario seleccionará la opción Form desde el menú
principal de Informix.

INFORMIX-SQL: Form Report Query-Language User-Menu Database Table Exit


Run, Modify, Create, or Drop a Form

Una vez seleccionada esta opción, aparecerá el siguiente menú en pantalla:

FORM: Run Modify Generate New Compile Drop Exit


Use a form to enter data or query a database

Seleccionando la opción Run, Informix preguntará a continuación qué formulario


se desea ejecutar:

RUN FORM >>


Choose a form with Arrows Keys, or enter a name, then press Enter
------------------Manual-----------------------------------------------------Press F1 for Help-----------------------
ATEMPLE

ATEMPLE es el nombre del formulario creado en la sección anterior para añadir


datos a la tabla. Se utilizarán las teclas de las flechas o se escribirá el nombre. Al
pulsar Enter, este formulario queda como activo y la pantalla aparece con la siguiente
presentación:

Manual de Informix-SQL Pág. 24 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 1: temple table **

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.

Consultas de datos que han de cumplir alguna condición


Desde la misma pantalla en la que se realizaban consultas para obtener datos
sin condiciones:

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 1: temple table **

numem [ ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]

Al seleccionar la opción Query, en lugar de pulsar Escape como en el caso


anterior, utilizando las teclas de las flechas, se situará el cursor sobre el campo sobre

Manual de Informix-SQL Pág. 25 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

el que se desea establecer la condición, y se escribirá el criterio que deben cumplir


los registros que se desea aparezcan en pantalla.

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 1: temple table **

numem [120 ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]

Una vez tecleado el valor en el campo correspondiente, sigue el mismo


procedimiento que en la sección anterior: Pulsación de la tecla Escape. Los registros
cuyo campo numde (Ejemplo superior) almacene el valor 120, aparecerán en
pantalla. Las opciones Next y Previous permitirán al usuario desplazarse por todos
estos registros. En el caso del ejemplo, solo hay uno que cumple la condición, ya que
el campo numem es índice único (clave).
Este procedimiento es válido tanto si se especifica un valor para un campo
único, o se introducen valores en varios campos. Al pulsar Escape Informix-SQL
presentará en pantalla todos los registros que cumplan simultáneamente las
condiciones especificadas.
Es posible no solo establecer un operador de igualdad para los valores de los
campos. Existen una serie de operadores que se pueden introducir para comparar los
valores introducidos con los correspondientes de los registros. Estos operadores son
los siguientes:

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 mas bajo


>> El valor mas alto
s* Valores que empiezan por S
[Ss]* Valores que comienzan por S o s
S?? Valor de tres caracteres que comiencen por S

Manual de Informix-SQL Pág. 26 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

=* El valor *
= Valor Nulo

Notas:

Ø Si un campo se deja en blanco en una consulta, se


supone que cualquier valor es aceptable en ese campo.
Ø No se puede combinar el operador de rangos con el uso
de comodines en el mismo campo.

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.

Generación automática de Informes. ACE


Para generar un informe, una vez seleccionada la base de datos, se utilizará la
opción Report del menú principal:

INFORMIX-SQL: Form Report Query-Language User-Menu Database Table Exit


Run, Modify, Create, or Drop a Report.

Una vez seleccionada esta opción aparece el siguiente sistema de menús:

REPORT: Run Modify Generate New Compile Drop Exit


Run a report

El significado de cada una de estas opciones es el siguiente:

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.

Manual de Informix-SQL Pág. 27 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Como se ha dicho anteriormente, la opción Generate es la que permitirá crear


un informe de la manera mas sencilla.

REPORT: Run Modify Generate New Compile Drop Exit


Generate a deafult Report

Una vez seleccionada esta opción, Informix presenta la siguiente pantalla:

GENERATE REPORT >>


Enter the name you want to assign to the report, then press Enter

En este momento, se ha de especificar el nombre que se desea asignar al


informe. Al pulsar Enter , Informix-SQL presenta el siguiente menú:

CHOOSE TABLE >>


Choose the table to be used in the default report
--------------------MANUAL1---------------------------------Press F1 for Help--------------------------------------
temple
tcentr
tdepto

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.

REPORT: Run Modify Generate New Compile Drop Exit


Run a Report

A continuación, la opción Run ejecutará el informe en pantalla.

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.

Escritura de Consultas SQL desde Informix-SQL


Para poder generar una consulta en SQL desde Informix-SQL, se elegirá la
opción Query-Language del menú principal de Informix, una vez seleccionada la Base
de Datos sobre la que se desea establecer la consulta. Si no se hubiese
seleccionado previamente, Informix-SQL indicará al usuario a través de un menú que
seleccione la base de datos deseada.

Manual de Informix-SQL Pág. 28 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

INFORMIX-SQL: Form Report Query-Language User-Menu Database Table Exit


Use Informix Structured Query Language

Una vez seleccionada esta opción, Informix presenta el siguiente menú:

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.

Después de seleccionar la opción New en el menú RDSQL, Informix presenta


una pantalla como la siguiente:

New: ESCAPE= Done Editing INSERT= Typeover/Insert


DELETE= Delete Character CONTROL-D= Delete rest of line
-----------------MANUAL1---------------------------------------Press F1 for HELP------------------------------------
_

El cursor se sitúa automáticamente en la parte inferior de la pantalla, zona que


corresponde al editor RDSQL. A partir de este momento, Informix espera la
introducción de sentencias correctas en lenguaje RDSQL.

Lenguaje RDSQL. Consultas de selección sin condiciones


La estructura mas simple es aquella que permitirá al usuario mostrar los
valores de una serie de campos de todos los registros de la tabla. Estas son las
consultas llamadas de Selección. No afectan al contenido de las tablas, sino que se
limitan a mostrar datos almacenados. En este caso la sintaxis de esa sentencia será
la siguiente:

Manual de Informix-SQL Pág. 29 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]

Si en la cláusula SELECT se sustituye la lista de nombres de campos por un


asterisco (*), el resultado reflejará todos los campos de la tabla especificada en
FROM.
En el ejemplo del manual, la sintaxis será la siguiente:

SELECT nomem,numhi,salar,comis
FROM temple

Esta consulta proporcionará los nombres de los empleados, su número de hijos,


su salario y su comisión, tomando los datos de la tabla temple (Datos de empleados).
Una vez redactada la consulta, se pulsará Escape. Informix presentará el menú
RDSQL, y en él se elegirá la opción Run. Automáticamente se mostrará en pantalla el
resultado de la consulta.

RUN: Next Restart Exit


Display next page of Query Results.
-----------------MANUAL1---------------------------------------Press F1 for HELP
nomem numhi salar comis
Pons, César 3 310000 110000
Lasa, Mario 1 350000 110000
Terol, Luciano 2 290000
Pérez, Julio 0 440000 110000
Aguirre, Aureo 2 310000 50000
Pérez, Marcos 2 480000
Veiga, Juliana 4 300000 100000
Gálvez, Pilar 2 380000
Sanz, Lavinia, 3 280000 80000
Alba, Adriana 0 450000
López, Antonio 6 720000
...
...
....

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.

Manual de Informix-SQL Pág. 30 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

A esa misma sentencia se le puede añadir la cláusula ORDER BY, de forma


que el resultado se devuelva ordenado. Hay que tener en cuenta que, para poder
ordenar según una columna, es necesario que esa columna se muestre en la
consulta. Se puede sustituir los nombres de las columnas por enteros indicando la
posición de cada columna en la lista de columnas.

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

El resultado se presentará igual que en el caso anterior, pero ordenado por


número de hijos, y a igualdad de número de hijos, ordenado por nombres de
empleado. ORDER BY puede ir seguido de DESC, en cuyo caso presentará los datos
ordenados de forma descendente.

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.

Exportar datos a Impresora o a Fichero


Al terminar la visualización de los resultados, en el caso anterior se ha
seleccionado la opción Modify. En lugar de elegir Modify, es posible seleccionar la
opción Output. Esta opción permitirá exportar el resultado de esa consulta a un
fichero o a una impresora.

RDSQL: New Run Modify Use-Editor Output Choose Save Info Drop Exit
Run and sends query results to a printer or a file.

Al elegir Output, Informix presenta el siguiente menú:

RDSQL: Printer New-File Append-File Exit


Sends Query results to a Printer

La utilidad de cada una de las opciones del menú es la siguiente:

Manual de Informix-SQL Pág. 31 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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.

Si se selecciona la opción New-File, Informix preguntará por el nombre que se


desea asignar al nuevo fichero y generará éste automáticamente. Si se selecciona la
opción Append-File, Informix preguntará por el nombre de un fichero existente y
añadirá los datos de la consulta actual a los que ya hubiese incluidos en ese fichero.

Consultas con definición de condiciones


A la sentencia redactada en el ejercicio anterior, se le pueden añadir cláusulas
que expresen una condición de forma que los listados emitidos presentarán solo los
registros que cumplan la condición o condiciones especificadas. Estas cláusulas son
WHERE y HAVING.

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:

Manual de Informix-SQL Pág. 32 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

SELECT nomem,numhi,salar,comis
FROM temple
WHERE numhi !=2
ORDER BY numhi,nomem

En este caso se presentarán los datos de aquellos empleados que NO tengan


dos hijos.
WHERE puede establecer varias condiciones simultáneamente unidas por un
operador AND o un operador OR. En el primer caso seleccionará todos los registros
que cumplan todas las condiciones establecidas. En el segundo caso, presentará
aquellos registros que al menos cumplan una de las condiciones establecidas.

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

Esta consulta mostrará aquellos registros cuyo número de hijos es


estrictamente mayor que tres y estrictamente menor que seis.
En el siguiente caso, la consulta mostrará los datos de los empleados que
tengan o dos o cinco hijos:

SELECT nomem,numhi,salar,comis
FROM temple
WHERE numhi = 2 OR numhi = 5
ORDER BY numhi,nomem

Where permite también establecer condiciones basadas en un rango de


valores, utilizando la cláusula BETWEEN:

SELECT [campo1,campo2,campo3,....campoN]
FROM [Nombre de la tabla]
WHERE [Campo1 BETWEEN valor1 AND valor2]
ORDER BY [campo1,campo2,campo3,....campoN]

Manual de Informix-SQL Pág. 33 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

En el ejemplo, esta consulta mostrará aquellos registros cuyo número de hijos


esté entre los valores de 3 y 6 (Ambos incluidos), es decir, los empleados que tengan
3, 4, 5, o 6 hijos.

SELECT nomem,numhi,salar,comis
FROM temple
WHERE numhi BETWEEN 3 AND 6
ORDER BY numhi,nomem

Otra forma de establecer la comparación del contenido de un campo con varios


valores es utilizar la cláusula IN. En este caso, Informix devuelve los registros en los
que el campo especificado contiene alguno de los valores establecidos en la
cláusula.

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

En este caso, Informix-SQL mostrará solo aquellos registros correspondientes a


empleados cuyo número de hijos sea 1, 2, o 6.
WHERE puede estudiar aquellos casos en los que el contenido del campo sea
nulo. (NULL). En este caso, la cláusula añadida es IS NULL.

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

Informix presentará aquellos empleados que tengan un valor nulo en el campo


comis (comisiones).

Manual de Informix-SQL Pág. 34 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

WHERE posibilita realizar búsquedas utilizando metacaracteres. En este caso,


utiliza las dos siguientes cláusulas:
MATCHES, para modelos basados en metacaracteres de UNIX (*, ?, []).
LIKE, para modelos basados en metacaracteres ANSI (%, _)
La sintaxis será la siguiente:

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

Informix buscará aquellos registros correspondientes a empleados cuyo nombre


comience por “Polo”seguido de cualquier cadena de caracteres.
En el siguiente ejemplo, Informix realizará exactamente la misma operación:

SELECT nomem,numhi,salar,comis
FROM temple
WHERE nomem LIKE “Polo%”
ORDER BY numhi,nomem

Si en lugar de MATCHES o LIKE, se utiliza NOT LIKE o NOT MATCHES,


Informix mostrará todos menos los que correspondan al modelo. En el ejemplo:

SELECT nomem,numhi,salar,comis
FROM temple
WHERE nomem NOT LIKE “Polo%”
ORDER BY numhi,nomem

Informix mostrará todos los registros correspondientes a empleados, menos


aquellos cuyo nombre comience por “Polo” seguido de cualquier cadena de
caracteres. En el siguiente ejemplo, Informix mostrará todos los registros
correspondientes a empleados cuyo nombre comienza por cualquier letra entre la R y
la V.

Manual de Informix-SQL Pág. 35 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

SELECT nomem,numhi,salar,comis
FROM temple
WHERE nomem MATCHES “[R-V]*”
ORDER BY numhi,nomem

Obsérvese que, al utilizar la cláusula MATCHES, se ha de utilizar el


metacarácter asterisco en lugar del metacarácter porcentaje.

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

Manual de Informix-SQL Pág. 36 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

La “x”puede representar un nombre de columna o una expresión.

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:

SELECT SUM(salar), numhi


FROM temple
GROUP BY numhi
ORDER BY numhi

Esta consulta mostrará el total de la suma de los sueldos de cada grupo de


empleados que tiene el mismo número de hijos, ordenado ascendentemente por
número de hijos.
Cada fila que contiene un valor nulo en la columna sobre la cual actúa la
cláusula GROUP BY es tratada como un grupo por separado. Esto es consistente
con el hecho de que, en realidad, el valor NULL es desconocido. No existe, pues,
razón para tratar todos los valores NULL como si fueran el mismo.
Para establecer condiciones utilizando funciones agregadas, es posible utilizar
la cláusula HAVING.
Ejemplo:

SELECT AVG(salar), MAX(salar, MIN(salar), numde, (MIN(salar)+MAX(salar))/2


FROM temple
GROUP BY numde
HAVING AVG(salar)>400000
ORDER BY numde

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.

Envío de los resultados de una consulta a una nueva tabla


Si se añade la cláusula INTO TEMP al final de la consulta, los resultados de
ésta se almacenarán en una nueva tabla cuyo nombre se especificará detrás de la
cláusula INTO TEMP. Hay que tener en cuenta que en este caso no se puede utilizar
ORDER BY.
Ejemplo:

SELECT numde, nomem


FROM temple
INTO TEMP salida

Manual de Informix-SQL Pág. 37 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Informix generará automáticamente la tabla salida con los datos resultado de la


consulta en su interior. Esta tabla es temporal y solo podrá ser utilizada en las
siguientes consultas. Se borrará automáticamente al salir de Informix-SQL.
Si se dese almacenar una expresión o función en una tabla temporal, es
necesario asignar un alias a esa expresión, como se muestra en el ejemplo siguiente:

SELECT numde, MIN(salar) mínimo, MAX(salar) máximo


FROM temple
GROUP BY numde
INTO TEMP salida;
SELECT numde, mínimo, máximo
FROM salida

En este ejemplo se realizan dos consultas consecutivas. En la primera se


genera la tabla salida, y en la segunda se seleccionan los datos desde esa tabla. Las
dos consultas están separadas por un carácter “;”

Establecimiento de relaciones entre tablas.


Una sentencia SELECT puede obtener información de varias tablas,
devolviendo los datos especificados de cada una de las tablas.
Se crea una nueva tabla temporal mediante la fusión horizontal de estas filas, y
esta tabla proporciona la información que es mostrada.
Las sentencias SELECT que acceden a más de una tabla normalmente unen
las tablas mediante una condición de igualdad en la cláusula WHERE.

SELECT numem, nomem, temple.numde, nomde


FROM temple, tdepto
WHERE temple.numde = tdpto.numde

En el ejemplo anterior la columna numde debe estar calificada, es decir, debe ir


precedida del nombre de la tabla. Esta consulta devolverá por cada uno de los
empleados: su número, su nombre, el número y el nombre del departamento al que
pertenece. (Nótese que la información del nombre del departamento no se encuentra
en la tabla de empleados)

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.

Manual de Informix-SQL Pág. 38 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Cuando no se incluye la cláusula WHERE en una consulta a varias tablas, se


generarán todas las posibles combinaciones. Esto se conoce como Producto
Cartesiano.

SELECT numem, temple.numde, nomde


FROM temple, tdepto

Debe notarse que una consulta de JOIN entre dos tablas se realiza de las
siguiente forma:

Ø Se realiza el producto cartesiano de las tablas especificadas en la


cláusula FROM.
Ø Se seleccionan las filas que cumplen la condición especificada en la
cláusula WHERE.
Ø Se muestran las columnas especificadas en la cláusula SELECT.

Supóngase que se han definido las siguientes tablas:

Tabla1 Tabla2
Campo1 Campo2 Campo2 Campo3
María 1 1 Fútbol
José 3 2 Baloncesto
Alberto 2 2 Balonmano

La sentencia

SELECT campo1, campo3


FROM tabla1, tabla2

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

Sin embargo la sentencia

Manual de Informix-SQL Pág. 39 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

SELECT campo1, campo3


FROM tabla1, tabla2
WHERE tabla1.campo2 = tabla2.campo2

Devolverá:
Campo1 Campo3
María Fútbol
Alberto Baloncesto
Alberto Balonmano

Como se puede observar la SELECT anterior, no muestra datos cuando


campo1 = José, ya que dicha fila contiene en el campo de unión de ambas tablas, un
valor no registrado en Tabla2. Este tipo de consulta trata a las tablas de forma
simétrica; es decir, una fila de una tabla se empareja con una fila de la otra sólo
cuando ambas filas tienen valor en la columna de unión.
Para subsanar la situación anterior, permitiendo que en nuestra consulta
apareciera la información cuando el campo1 = José, bastará con realizar una
sentencia SELECT con el siguiente formato:

SELECT campo1, campo3


FROM tabla1, outer tabla2
WHERE tabla1.campo2 = tabla2.campo2

En este caso el resultado de la consulta será:

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.

Creación de un Formato Personalizado Monotabla


Para comenzar a comprender el funcionamiento de los formatos de pantalla
definidos por el usuario, lo mas fácil es partir de un formato generado
automáticamente. Como se recordará, para crear un formato por defecto, lo único
que es necesario hacer es elegir la opción Form del menú principal. En el siguiente

Manual de Informix-SQL Pág. 40 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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:

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 1: temple table **

numem [ ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]

Para modificar este formato, y adaptarlo a las exigencias propias, será


necesario salir al menú principal de formatos pulsando e o seleccionando la opción
Exit en el menú. Esta operación presentará en pantalla el menú principal de formatos.

FORM: Run Modify Generate New Compile Drop Exit


Modify a form specification.

En este menú, se seleccionará la opción Modify. En el siguiente menú, se


especificará el nombre del formato que se desea modificar. Informix-SQL activará
automáticamente el editor por defecto (VI) y en pantalla aparecerá la especificación
de Formulario tal como aparece a continuación.

Estructura de la especificación de formulario

database EJEMPLO1
screen
{
numem [f000 ]
numde [f001 ]
extel [f002 ]
fecna [f003 ]
fecin [f004 ]

Manual de Informix-SQL Pág. 41 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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

En este fichero de texto se pueden realizar una serie de modificaciones para


adaptar el formato a lo que se desee. Los elementos de este formulario son los
siguientes:

Secciones de la especificación de formulario


En la parte superior (Sección DATABASE), se define sobre qué base de datos
se está trabajando. (Database EJEMPLO1). Esta sección - a diferencia de otras - no
necesita un mensaje (end) que indique donde termina.
En la siguiente sección (screen), se determina como aparecerán los datos en
pantalla. En la parte de la derecha están escritos los nombres de los campos de la
tabla. Estos nombres pueden ser cambiados por otros que el usuario final identifique
mas fácilmente. En la parte derecha aparecen unas etiquetas que enlazan el nombre
de campo aparecido a la derecha con su contenido (aparecido a la Izquierda). Estas
etiquetas presentan un código que está definido en la cuarta sección del formulario
(atributes). Tanto la sección screen como la sección atributes deben llevar un
indicador de fin de sección. Este indicador es la etiqueta end.
La tercera sección (tables) especifica sobre que tabla se ha construido el
formulario. En este caso, la tabla es temple (Datos de Empleados)
Es posible añadir nuevos modificadores a cada sección, de forma que el
formulario adquiera un aspecto y funcionamiento diferente al creado por defecto. Una
primera modificación podría ser la siguiente:

database EJEMPLO1
screen
{
Número de empleado: [f000 ]

Manual de Informix-SQL Pág. 42 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

------------------------------
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.

MODIFY FORM: Compile Save-and-Exit Discard-and-Exit


Compile the form specification.

Primero se seleccionará la opción Compile. Esta opción prepara la


especificación de formulario modificada desde el editor, a una especificación que

Manual de Informix-SQL Pág. 43 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Informix pueda ejecutar. Si no se han encontrado errores, Informix activa la opción


Save-and-Exit. Esta opción guardará las modificaciones y dejará el formulario listo
para ejecutarse, presentando en pantalla el menú principal de Formularios. La opción
Discard-and-Exit abandona todos los cambios que se hayan realizado desde el editor
y deja la especificación de formulario como estaba antes de editarlo.
Al ejecutar la opción Run, la pantalla aparecerá como la siguiente:

PERFORM: Query Next Previous Add Update Remove Table Screen..


.
Searches the active database table ** 1: temple table **

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: [ ]

Igual que es posible modificar estructuras de informes, simplemente añadiendo


nuevos textos, también es posible añadir nuevos atributos a los campos, en la
sección correspondiente. Estos atributos son los siguientes:

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.

Manual de Informix-SQL Pág. 44 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Right: Justifica los datos numéricos a la derecha.


Noupdate: Impide que se modifiquen datos con la opción
Update. No impide que se añadan datos.
Queryclear: Limpia el contenido de un campo que une dos
tablas al entrar en la opción de consultar. Se
aplica solamente a formatos de mas de una
tabla.
Required: Requiere que el campo contenga datos antes
de modificarlo o dar de alta a la fila.
Verify: Requiere que se teclee la información dos
veces para asegurar su exactitud.
Noentry: Evita que los datos se añadan a una columna
al añadir una fila nueva. No impide la
modificación de datos.
Default: Asigna un valor por defecto a un campo.
Ejemplo: Default=TODAY.
Format: Controla el formato de pantalla para las
columnas de tipo decimal, smallfloat, float y
date. Ejemplos:
Cadena de Formato de fecha:
Defecto: 23/12/1997
FORMAT=”mm/dd/yy”: 23/12/97
FORMAT=”yymmdd”: 971223
FORMAT=”dd-mm-yy”: 23-12-97
FORMAT=”mmm dd, yyyy”: Dic 23, 1997
FORMAT=”(ddd) mmm,yyyy”: (Sat. Dic 23,
1997
Cadena de Formato numérico:
FORMAT=”###.###”: 234.566
FORMAT=”###,###.##”: 123,234.566
Zerofill: Funciona igual que right, pero los espacios a la
izquierda se rellenan con ceros.

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 ]

Manual de Informix-SQL Pág. 45 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

-----------------------------
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",

Manual de Informix-SQL Pág. 46 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Reverse, Right, Zerofill;


{Esta octava 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 número de hijos del
empleado“, aparecerá en vídeo inverso, alineará los caracteres introducidos a la derecha y rellenará
el resto de posiciones con ceros.}
f008=temple.nomem, Comments="Introduzca el nombre de empleado", reverse, Upshift,
Noentry;
{Esta décima zona de datos mostrará en la parte inferior de la pantalla el Introduzca el nombre del
empleado“, aparecerá en vídeo inverso, guardará todas las letras como mayúsculas y no permitirá
añadir datos nuevos.}
end

En el ejemplo superior, los identificadores de sección están escritos en negrilla


y los comentarios a las diferentes líneas, en cursiva. En el VI, las líneas
correspondientes a definiciones de etiquetas no pueden estar divididas. Aquí
aparecen así por motivos de longitud.

Creación de Formatos Multitabla


Hasta el momento, se ha visto como crear un formulario para acceder a datos
procedentes de una sola tabla. La base del modelo relacional consiste en tener la
información distribuida en una serie de tablas de forma que la redundancia de datos
sea la menor posible, de tal manera que el trabajo mas frecuente consistirá en utilizar
varias tablas, tanto a la hora de obtener información, como a la hora de introducirla.
Es posible crear un formulario que afecte a varias tablas. El procedimiento es
similar al caso estudiado anteriormente, pero es necesario establecer una serie de
especificaciones adicionales para que permanezca la consistencia de los datos.
Según lo dicho anteriormente, para crear un formulario que afecte a una serie
de tablas, una vez seleccionada la base de datos, el procedimiento parte del menú
Form de Informix-SQL y elegir la opción Generate:

FORM: Run Modify Generate New Compile Drop Exit


Generate a default form.

Igual que cuando se trataba de una sola tabla, Informix-SQL preguntará por el
nombre que se dese aplicar al formulario:

GENERATE FORM >>


Enter the name you want to assign to the form, then press Enter.
-----Page 1 of 1-----------------------------------------MANUAL---------------------Press F1 for Help---------

A continuación, preguntará sobre qué tabla se desea construir el formulario:

CHOOSE TABLE >>


Choose the table to be used in the default form.
-----Page 1 of 1-----------------------------------------MANUAL---------------------Press F1 for Help---------

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.:

Manual de Informix-SQL Pág. 47 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

GENERATE FORM: Table-Selection-Complete Select-more-Tables Exit


Select another table to include in the default form.
-----Page 1 of 1-----------------------------------------MANUAL---------------------Press F1 for Help----------

En este momento se seleccionará la segunda tabla, y se repetirá el proceso


tantas veces como tablas se deseen añadir. Un formulario puede afectar a un
máximo de diez tablas. Cuando ya no se deseen añadir mas tablas, la última opción
será elegir Table-Selection-complete, con lo que informix-SQL devolverá al usuario al
menú principal de Formularios. En el ejemplo se ha elegido la tabla tdpto en primer
lugar y la tabla temple en segundo lugar:

FORM: Run Modify Generate New Compile Drop Exit


Use a form to enter data or query a Database.

Seleccionando la opción Run, y especificando el nombre del formulario, éste se


ejecutará y la pantalla aparecerá como sigue:

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 1: tdpto table **

numde [ ]
numce [ ]
direc [ ]
tidir [ ]
presu [ ]
depde [ ]
nomde [ ]

En la figura anterior aparece el formulario con el mismo aspecto que tendría en


el caso de estar vinculado a una única tabla, sin embargo ahora el usuario puede
pasar a trabajar con la segunda tabla vinculada al formulario utilizando la opción
Table del menú:

PERFORM: Query Next Previous Add Update Remove Table Screen...


Selects the current table ** 1: temple table **

Al elegir esta opción, el mensaje de la segunda línea de la fila de menús


cambia, y en pantalla aparecen los campos de la segunda tabla:

Manual de Informix-SQL Pág. 48 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 2: temple table **

numem [ ]
numde [ ]
extel [ ]
fecna [ ]
fecin [ ]
salar [ ]
comis [ ]
numhi [ ]
nomem [ ]

Si desde el menú principal de Formularios, se selecciona la opción Modify, se


podrá acceder al código generado automáticamente para este formulario. Una
posibilidad es eliminar la segunda screen (En negrita y cursiva en el listado).
Realizando este cambio, ambas tablas aparecerán simultáneamente en la misma
pantalla, y la opción Table se limitará a activar una u otra.

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

Manual de Informix-SQL Pág. 49 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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

Con esta simple modificación, después de compilar, salvar y ejecutar el


formulario, la pantalla aparecerá ahora como sigue:

Manual de Informix-SQL Pág. 50 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 2: temple table **

numde [ ]
numce [ ]
direc [ ]
tidir [ ]
presu [ ]
depde [ ]
nomde [ ]
numem
numde
extel
fecna
fecin
salar
comis
numhi
nomem

Como se puede apreciar, solo están activos los campos correspondientes a la


primera tabla. (Son los que aparecen con corchetes).
Al elegir la opción Table, la situación se invierte, y solo aparecen activos los
campos correspondientes a la segunda tabla (figura siguiente).
Observando esta pantalla, el usuario comprobará que el campo común a esas
dos tablas (numde, Número de departamento), aparece dos veces, una por cada
tabla. Es te campo ha de presentar el mismo valor en las dos tablas ya que será el
que permita enlazarlas.
Un cambio sencillo en el código evitará esta duplicación, y permitirá
posteriormente gestionar los datos de forma eficiente.
Es suficiente con asignar la misma etiqueta a los dos campos numde de las dos
tablas, además será necesario eliminar la etiqueta sobrante, ya que dos campos
diferentes van a utilizar la misma etiqueta. Asimismo será necesario eliminar una de
las dos referencias al campo en el formulario para que éste solamente aparezca una
vez. Este enlace recibe el nombre de Enlace Simple.
El código del formulario generado después de estas modificaciones es el
siguiente:

database EJEMPLO1
screen
{
numde [f000 ]
numce [f001 ]
direc [f002 ]
tidir [a]
presu [f003 ]

Manual de Informix-SQL Pág. 51 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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

Como se puede comprobar, la etiqueta [f007] ha desaparecido, y ahora la


etiqueta f000 identifica tanto al campo numde de la primera tabla como al campo
numde de la segunda tabla. Después de compilar, guardar y ejecutar, la pantalla
aparece como sigue:

Manual de Informix-SQL Pág. 52 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 2: temple table **

numde [ ]
numce [ ]
direc [ ]
tidir [ ]
presu [ ]
depde [ ]
nomde [ ]
numem
extel
fecna
fecin
salar
comis
numhi
nomem

En esta pantalla, si se ejecuta la opción Table, se activará la segunda tabla, el


campo numde permanecerá activado, se desactivarán todos los demás campos de la
primera tabla, y se activarán todos los campos de la segunda.

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 2: temple table **

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

Manual de Informix-SQL Pág. 53 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

ú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

y particularizada para el ejemplo:

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

Manual de Informix-SQL Pág. 54 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

un registro de estas características desde el formulario multitabla creado, ya que al


haber un solo campo común activo esta operación no puede realizarse, sin embargo,
cabe la posibilidad de utilizar un formulario que solo afectase a la tabla secundaria.
En este formulario, el usuario podría añadir un registro con un valor cualquiera en el
campo común. Para evitar esta situación, y mantener la integridad de los datos, es
necesario implementar algún mecanismo de verificación. Este mecanismo lleva el
nombre de enlace de Verificación.
Por tanto, la única operación que tendrá que realizar el usuario es añadir la
siguiente línea en el código del formulario:

Identificador de Campo= columnatabla1=*columnatabla2

En la base de datos de ejemplo:

[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:

Identificador de campo=columna de base,


LOOKUP Campo de Referencia=Columna de Referencia
JOINING Columna de Enlace

Formularios generados desde el Sistema Operativo


Informix proporciona al usuario la oportunidad de generar formularios de
pantalla trabajando directamente desde el sistema operativo. Para realizar esta
operación, será necesario teclear el código correspondiente al formulario desde el
editor de texto que se utilice. Una vez tecleado este código, será necesario
almacenar el archivo con un nombre cualquiera y extensión .PER.
A continuación, y siempre desde el indicador del Sistema Operativo, se ha de
teclear la orden:

sformbld nombrearchivo.PER

Este comando realiza la llamada al módulo de compilación de formularios, que


genera un nuevo fichero con el mismo nombre y extensión .FRM. Por último, para
ejecutar el formulario creado, se utiliza el comando:

Manual de Informix-SQL Pág. 55 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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.

Creación y modificación de un Informe


A partir del menú principal, y utilizando en primer lugar la opción Report,

INFORMIX-SQL: Form Report Query-Language User-Menu Database Table Exit


Run, Modify, Create, or Drop a Report.

A continuación la opción Generate,

REPORT: Run Modify Generate New Compile Drop Exit


Generate a deafult Report

asignando un nombre:

GENERATE REPORT >>


Enter the name you want to assign to the report, then press Enter

especificando cual es la tabla sobre la que se desea crear el informe:

CHOOSE TABLE >>


Choose the table to be used in the default report
--------------------MANUAL1---------------------------------Press F1 for Help--------------------------------------
temple
tcentr
tdepto

y, por último, utilizando la opción Run:

Manual de Informix-SQL Pág. 56 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

REPORT: Run Modify Generate New Compile Drop Exit


Run a Report

y especificando cual es el informe que se desea ejecutar, este informe


aparecerá por pantalla sin necesidad de mas operaciones.
Existe la posibilidad de modificar este informe utilizando la opción Modify del
menú de Informes:

REPORT: Run Modify Generate New Compile Drop Exit


Modify a Report Specification.

Al elegir esta opción, Informix-SQL preguntará cual es el nombre del informe


que se desea modificar:

MODIFY REPORT >>


Choose a report with Arrow Keys, or Enter a name, then press Enter.
--------------------MANUAL1------------------------------------Press F1 for Help-----------------------------------
info1
info2
info3

Una vez seleccionado el informe, se lanza automáticamente el editor (VI), y el


código que aparece en pantalla es el siguiente:

database MANUAL end


select
numem,
numde
extel,
fecna,
fecin,
salar,
comis,
numhi,
nomem
from temple end
format every row end

Secciones de un Informe ACE


Igual que en el caso de los formularios, aparecen una serie de secciones
definidas por la palabra end. Estas secciones son las correspondientes a database,
select y format y son imprescindibles para el funcionamiento del informe.

Manual de Informix-SQL Pág. 57 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Además de estas secciones imprescindibles, en un informe ACE pueden


incluirse una serie de secciones opcionales que modificarán tanto el aspecto del
informe, como su funcionamiento. Estas secciones son las siguientes:

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.

Teniendo en cuenta lo expresado anteriormente, el código de un informe podría


estar formado por lo siguiente:

Sumario de la sintaxis de ACE


Sección Database DATABASE [nombre de la base de datos] END

Sección Define DEFINE


Variable [nombre variable tipodato]
Param[Integer] [nombre parámetro tipo parámetro].
END

Sección Input INPUT


Prompt For [nombre variable] Using [Cadena]
END

Sección Output OUTPUT


Page Length [Integer]
Right Margin [Integer]
Left Margin [Integer]
Top Margin [Integer]
Bottom Margin [Integer]
Report to [Nombre de Fichero]
| Report to Pipe [Programa]
| Report to Printer
END

Sección Select SELECT


[sentencias SQL]
from [nombre de la tabla]
END

Manual de Informix-SQL Pág. 58 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Sección Format FORMAT


First Page Header
Page Header
Page Trailer
On Every Row
Before Group Of
After Group Of
On Last Row
END

A continuación se estudiarán algunas de estas secciones detalladamente:

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

Manual de Informix-SQL Pág. 59 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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

FORMAT (Primer tipo)


Every Row: Implica que cada línea sea escrita con un
formato por defecto. Útil para crear listados
rápidamente.
END

FORMAT (Segundo Tipo)


First Page Header [Acción]: Especifica cómo será el encabezado de la
primera página del informe. Acción es una
expresión de ACE que ejecuta una operación
definida. Las acciones que soporta ACE se
estudiarán a continuación.
Page Trailer [Acción]: Especifica cómo será el pie de cada página del
informe.
Page Header [Acción]: Especifica cómo será el encabezado de cada
página del informe.
On Every Row [Acción]: Especifica cómo será cada línea del informe.
Puede utilizarse Using para especificar los
formatos de cada tipo de datos.
On Last Row [Acción]: Especifica las acciones que serán
emprendidas después de la última línea
seleccionada. Suelen ser cálculos.
Before Group Of [Acción]: Cuando en la sección SELECT existe una
cláusula GROUP BY, se puede especificar un
Encabezado para cada grupo de líneas.
After Group Of [Acción]: Cuando en la sección SELECT existe una
cláusula GROUP BY, se puede especificar un
Pie para cada grupo de líneas.
END

Acciones Ejecutables en un Informe

Manual de Informix-SQL Pág. 60 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

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.

Acciones / Expresiones de Cálculo


LET: Sintaxis: LET NombreVariable = Expresión. Permite
asignar un valor a una Variable.
OPERADORES: +, - , *, /, **.
ARITMÉTICOS
TOTAL OF: Sintaxis: TOTAL OF Expresión. Calcula la suma de
una Expresión.
MIN OF: Sintaxis: MIN OF Expresión. Calcula el valor mínimo de
una Expresión.
MAX OF: Sintaxis: MAX OF Expresión. Calcula el valor máximo
de una Expresión.
COUNT: Devuelve el número de líneas seleccionadas por la
cláusula WHERE.
AVG o AVERAGE: Sintaxis:AVG Expresión . Calcula la media de una
Expresión.
PERCENT: Sintaxis: Expresión
DATE(): Sintaxis: DATE(Expresión). Convierte la expresión en
un valor de tipo DATE.
DAY(): Sintaxis: DAY(Expresión). Devuelve el número de día
del mes, de la fecha dada como argumento.
MDAY(): Sintaxis: MDAY(mm, dd, yyyy).Devuelve un valor de
tipo DATE de la fecha dada como argumento.
MONTH(): Sintaxis: MONTH(Expresión). Devuelve el número del
mes de la fecha dada como argumento.

Manual de Informix-SQL Pág. 61 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

YEAR(): Sintaxis: YEAR(Expresión). Devuelve el número del


año de la fecha dada como argumento.
WEEKDAY(): Sintaxis: WEEKDAY(Expresión). Devuelve el número
del ida de la semana de la fecha dada como
argumento. (0: Domingo, 1: Lunes, 2: Martes… )
PAGENO: Contiene el número de la página actual.
LINENO: Contiene el número de la línea actual de la página.
DATE: Contiene la fecha actual bajo la forma de cadena de
caracteres en formato americano.
TIME: Contiene la hora actual
TODAY: Contiene la fecha actual en misma forma que el
sistema Operativo.

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:

MODIFYREPORT: Compile Save-and-Exit Discard-and-Exit


Compile the report specification.

La primera acción que se debe realizar es compilar el informe, es decir, traducir


el texto a algo que Informix pueda entender. Para ello se elegirá la opción Compile. Si
no hay errores, Informix-SQL volverá a dejar al usuario en el mismo menú y
aparecerá un mensaje en la parte inferior de la pantalla indicando que no ha habido
errores de compilación. Ahora será necesario guardar los cambios realizados. Para
ello se elegirá la opción Save-and-Exit. Si no se deseara guardar los cambios, la
opción a elegir sería Discard-and-Exit.
Una vez salvado el informe, Informix-SQL presentará el menú principal de
Informes para poder ejecutar la opción Run, y ver así los resultados producidos por el
informe creado.

Manual de Informix-SQL Pág. 62 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

REPORT: Run Modify Generate New Compile Drop Exit


Run a Report

Ejemplos de Listados de Informes

Informes Creados desde el Sistema Operativo


Es posible la creación de informes desde el Sistema Operativo, utilizando
directamente un editor para crear el informe desde el primer momento, y no utilizar
así Informix-SQL para generar el informe base sobre el que luego se trabajará.
Para llevar a cabo este proceso, se generará el código del informe desde el
editor y se guardará con el nombre que se desee y la extensión .ACE. Una vez
generado el fichero, desde el prompt del Sistema Operativo se tecleará la siguiente
orden:

saceprep nombrearchivo.ACE

Informix-SQL emitirá un mensaje en el que informa al usuario de que el informe


ha sido compilado con éxito y se ha generado un nuevo archivo con el mismo nombre
que el anterior, pero con extensión .ARC. El último paso que queda para la utilización
de este informe es ejecutarlo. Para ello, y siempre desde el indicador del Sistema
Operativo, hay que teclear la orden:

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.

Manual de Informix-SQL Pág. 63 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Para llevar a cabo el proceso de generación de un sistema de menús, se


elegirá la opción User-Menú del menú principal de Informix-SQL:

INFORMIX-SQL: Form Report Query-Language User-Menu Database Table Exit


Run or Modify a Custom-built Menu
-------------------------------------------------------------------------Press F1 for Help--------------------------------

Al seleccionar la opción User-Menú, el nuevo menú que aparece gestiona la


creación y posterior funcionamiento del sistema de menús:

USER-MENU: Run Modify Exit


Run the User Menu for the current Database
-------------------------------------------------------------------------Press F1 for Help--------------------------------

La opción Modify permitirá crear un nuevo menú:

USER-MENU: Run Modify Exit


Modify the User-menu for the Current Database
-------------------------------------------------------------------------Press F1 for Help--------------------------------

Y presentará la pantalla de creación o modificación de menús:

PERFORM: Query Next Previous Add Update Remove Table Screen...


Searches the active database table ** 1: temple table **
========================MENU ENTRY FORM=====================
Menú Name [ ]
Menú Title [ ]

----------------------------------------------SELECTION SECTION-----------------------------------
Selection number Selection Type
Selection
Text:

Selection
Action:

Manual de Informix-SQL Pág. 64 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Es te menú tiene un gran parecido con el menú principal de PERFORM. Para


comenzar a crear el menú, es necesario pulsar la opción Add. El cursor irá
recorriendo cada una de las opciones de la parte inferior de la pantalla:

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:

PERFORM: Query Next Previous Add Update Remove Table Screen...


Selects the current table ** 2: sysmenuitems table **
========================MENU ENTRY FORM=====================
Menú Name [main ]
Menú Title [Primer sistema de menús ]

----------------------------------------------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:

Manual de Informix-SQL Pág. 65 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

PERFORM: Query Next Previous Add Update Remove Table Screen...


Adds a row to the active database table ** 2: sysmenuitems table **
========================MENU ENTRY FORM=====================
Menú Name [main ]
Menú Title Primer sistema de menús

----------------------------------------------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:

PERFORM: Query Next Previous Add Update Remove Table Screen...


Adds a row to the active database table ** 2: sysmenuitems table **
========================MENU ENTRY FORM=====================
Menú Name [main ]
Menú Title Primer sistema de menús

----------------------------------------------SELECTION SECTION-----------------------------------
Selection number 1 Selection Type F
Selection
Text: Primera Opción

Selection
Action: NombreForm

A continuación, las especificaciones para la segunda opción:

Manual de Informix-SQL Pág. 66 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

PERFORM: Query Next Previous Add Update Remove Table Screen...


Adds a row to the active database table ** 2: sysmenuitems table **
========================MENU ENTRY FORM=====================
Menú Name [main ]
Menú Title Primer sistema de menús

----------------------------------------------SELECTION SECTION-----------------------------------
Selection number 2 Selection Type R
Selection
Text: Segunda Opción

Selection
Action: NombreInfor

Y la presentación en pantalla será la siguiente al ejecutar Run:

Primer Sistema de Menús

1.- Primera Opción


2.- Segunda Opción

Use space bar, arrow keys, or type number to make selection.


Enter ‘e’to return to previous menu o Exit.
Enter carriage Return to execute selection: 1

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.

Manual de Informix-SQL Pág. 67 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Variable Descripción Valor por defecto


INFORMIXDIR Localización de los programas Es necesario
de Informix-SQL. establecerlo.
PATH Especifica al shell la Es necesario
localización de los comandos establecerlo.
Informix situados en el
subdirectorio BIN.
TERM y TERMCAP Informix suministra un archivo Es necesario
llamado TERMCAP con establecerlo.
información sobre la mayoría de
los terminales.
DBEDIT Especifica el editor. Vi
DBEDIT=nombre editor
DBPATH Especifica la ruta de búsqueda Directorio en curso.
para localizar una base de
datos.
DBPRINT Especifica el comando de Lp
Impresión.
DBPRINT=”device”
DBTEMP Especifica donde se han de /tmp
almacenar los ficheros
temporales.
DBDATE Especifica el formato para los mdy4/
datos de tipo DATE.
DBDATE=formato
formato=combinación de
elementos d (día), m (mes), y
(año). El año puede ser
expresado por dos o cuatro
cifras. El separador puede ser
un carácter especial cualquiera.
Ejemplo: DBDATE=dmy2/
DBMONEY Especifica el formato de los $100.00
datos de tipo MONEY.
DBMONEY=separador unidad /
unidad separador. Ejemplo:
DBMONEY= , Pts
DBMENU Nombre del menú de usuario Main
llamado por informix-SQL.
Informix utiliza el valor por
defecto para activar el menú
Main.
DBDELIMITER Especifica el delimitador para |
los comandos LOAD y
UNLOAD.

Manual de Informix-SQL Pág. 68 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

Catálogos del SGBD Informix


Los catálogos del sistema son las tablas que definen la base de datos. El
SGDB accede automáticamente a las tablas cuando se ejecuta cualquier sentencia
SQL. El Administrador de la base de datos puede modificar directamente el contenido
de los catálogos.

Nombre de Fichero Contenido


Systables Información sobre todas las tablas de la base de datos. Es la
mas importante del catálogo. Contiene tipos, identificadores y
caminos de acceso.
Syscolumns Contiene información sobre todas las columnas de la base de
datos. Nombres, tipos, longitudes y su posición dentro de la
tabla.
Sysindexes Contiene información sobre todos los índices de la base de
datos. Para cada índice, contiene el nombre, identificador de la
tabla, tipo de índice y una lista que puede contener hasta 8
identificadores de columnas que componen el índice.
Sysusers Controla permisos y autorizaciones a nivel de base de datos.
Para cada usuario, el nombre, la clave, el nivel de privilegios
sobre la base de datos y el tipo de usuario.
Systabauth Controla autorizaciones y permisos para las tablas.
Syscolauth Controla autorizaciones y permisos a nivel de columna.
Synonims Contiene sinónimos para las tablas y las vistas creadas por los
usuarios.
Sysdepends Controla de qué tablas y vistas depende una vista. Así, si una
tabla es suprimida, las vistas a las que está enlazada son
suprimidas a su vez.
Sysviews Contiene cualquier vista creada desde una sentencia RDSQL.

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.

Manual de Informix-SQL Pág. 69 http://www.serem.com


SEREM FORMACIÓN Cliente: LUCENT TECHNOLOGIES

& Introducción práctica al diseño de Sistemas de Gestión de Bases de


Datos. Gerry M. Litton. Ediciones Anaya Multimedia. 1991.

Manual de Informix-SQL Pág. 70 http://www.serem.com

You might also like