Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Informixsql
Informixsql
CURSO DE INFORMIX-SQL
Convenciones utilizadas
En funcin de los posibles manejadores de base de datos Informix disponibles en el
mercado, Informix Standard Engine o Informix-OnLine, las descripciones de los
comandos tendrn la forma:
COMANDO
Descripcin
Descripcin del propsito general del comando.
Sintaxis:
SE Sintaxis del comando para el manejador Standard Engine
OL
Introduccin
Estructura del men de SQL
El entorno de trabajo provisto por Informix-SQL consta de una serie de menes
que permiten ejecutar todas las operaciones posibles desde el ambiente. Se presenta a
continuacin la estructura del men principal:
Query-language
New
Run
Modify
UserEditor
Output
Choose
Save
Info
Drop
Exit
Report
Form
Run
Modify
Generate
New
Compile
Drop
Exit
Run
Modify
Generate
New
Compile
Drop
Exit
Informix-SQL
Database
Select
Create
Drop
Exit
UserMenu
Run
Modify
Exit
Table
Create
Alter
Info
Drop
Exit
DATETIME c1 TO c2
SE y OL
INTERVAL c1 TO c2
SE y OL
TEXT
OL
BYTE
OL
Comandos de SQL
Podemos agrupar las sentencias del Informix-SQL en cinco tipos:
1 - DDL (Lenguaje de Definicin de Datos)
Base de Datos
CREATE
DATABASE
DATABASE
Tablas
CREATE
TABLE
ALTER TABLE
CLOSE
DATABASE
DROP
DATABASE
RENAME
TABLE
DROP TABLE
Vistas
CREATE
VIEW
DROP VIEW
Sinnimos
CREATE
SYNONYM
DROP
SYNONYM
Indices
CREATE
INDEX
ALTER INDEX
Generales
UPDATE
STATISTICS
RENAME
COLUMN
DROP INDEX
INSERT
UPDATE
DELETE
Locking de tablas
GRANT
REVOKE
LOCK TABLE
UNLOCK TABLE
SET LOCK MODE
Tablas
BEGIN WORK
COMMIT WORK
ROLLBACK WORK
START DATABASE
ROLLFORWARD DATABASE
CREATE AUDIT
DROP AUDIT
RECOVER TABLE
5 - Sentencias Auxiliares
CHECK TABLE
REPAIR TABLE
LOAD
UNLOAD
INFO
OUTPUT
OL
En Standard Engine, la base se crea a partir del directorio actual de trabajo, y se puede
especificar el nombre del path donde ubicar el transaction log file.
En OnLine la base se crea en el root dbspace, salvo que se indique lo contrario por la
clusula IN.
Si se usa el modo BUFFERED para el transaction log file, se mejora la performance a
cambio de la posibilidad de perder las ltimas operaciones previas a una cada.
En ambos casos, el modo ANSI adiciona las siguientes prestaciones:
Todas las sentencias son tratadas como transacciones automticamente, en
modo unbuffered
Las referencias a las tablas, vistas, sinnimos, ndices, etc. deben ser hechas
con el nombre del propietario, salvo que sea ste quien las invoque.
Medidas de seguridad: los usuarios no reciben por default el privilegio de
Public sobre las tablas y sinnimos.
La base de datos creada queda como la base de datos activa.
DATABASE
Descripcin
Esta sentencia se utiliza para seleccionar una Base de Datos accesible como Base de Datos
activa.
Sintaxis
DATABASE Nombre-Base-De-Datos [EXCLUSIVE]
Se puede seleccionar una base de datos de otro server, especificando el nombre del
mismo.
Si se est trabajando con una base de datos y se usa esta sentencia, se cierra la anterior, a
menos que la misma est en otro server, en cuyo caso reporta un error
La clusula EXCLUSIVE se utiliza para impedir que otros usuarios ingresen a la base de
datos. Si alguien la est usando, reporta un error.
CLOSE DATABASE
Descripcin
Esta sentencia se utiliza para cerrar la Base de Datos activa.
Sintaxis
CLOSE DATABASE
Si se est trabajando con transacciones, hay que dejarlas cerradas antes de cerrar la base
de datos
DROP DATABASE
Descripcin
Esta sentencia se utiliza para borrar una Base de Datos completa, incluyendo todos los
catlogos del sistema, ndices y datos.
Sintaxis
DROP DATABASE Nombre-Base-De-Datos
Para poder usar esta sentencia, es necesario ser el usuario informix o tener el privilegio
DBA. En este caso no solicita confirmacin.
No se puede borrar una tabla que est siendo utilizada por otros usuarios
En Standard Engine, borrar una base de datos implica borrar el transaction log file.
En Standard Engine se remueve el subdirectorio que cre para la base de datos, a
menos que el usuario hubiera agregado all archivos que no correspondan a la base.
CREATE TABLE
Descripcin
Esta sentencia se utiliza para crear una nueva tabla en la Base de Datos, especificando
restricciones de integridad sobre las columnas, disear el tamao de los extents inicial y
subsiguientes y especificar cmo ser el locking de esa tabla.
Sintaxis
SE
CREATE [TEMP] TABLE Nombre-Tabla
(Nombre-Columna Tipo-Dato [Clusula Default] [NOT NULL],...
[Clusula CONSTRAINT])
[IN "pathname"]
OL
Los nombres de las tablas deben ser nicos dentro de la base de datos. En una base
ANSI, la combinacin Propietario.Nombre-Tabla debe ser nico.
Una tabla temporaria dura por la sesin de trabajo, y su nombre no puede coincidir con
ninguna tabla, vista o sinnimo de la base de datos.
Al menos una columna debe figurar al crear la tabla.
En las tablas temporarias se puede especificar una clusula WITH NO LOG para indicar
que no registre en el transaction log file las operaciones sobre esa tabla.
Se puede indicar dnde crear la tabla: en el caso del Standard Engine, se puede indicar
un path diferente del que est la base de datos; en OnLine, se puede indicar un dbspace
diferente al que est la base de datos. Ms an, se puede especificar el tamao del primer
extent y el de los siguientes (debe hacerse en pginas, con un mnimo de 4)
10
A nivel de las tablas se pueden definir constraints, para indicar que la columna
tenga un valor por default, sean clave primaria, clave externa, o que los datos que se
ingresen respondan a determinados chequeos. Para ello, se incluyen las formas generales de
las diferentes clusulas:
La forma general de una clusula Constraint es:
[UNIQUE | PRIMARY KEY (Columna 1,...,Columna n)]
[FOREIGN KEY (Columna 1,...,Columna n) REFERENCES Nombre-Tabla
(Lista-Columnas)]
[CHECK (Condicin)]
CONSTRAINT Nombre_Restriccin]
UNIQUE indica que no admita valores duplicados para esa columna. No es vlida sobre
columnas de tipo BYTE o TEXT.
PRIMARY KEY se utiliza para indicar que una columna o conjunto de columnas sean la
clave primaria, por lo que no admitir valores nulos o duplicados. Slo una definicin de
Primary Key es vlida por tabla. No es vlida sobre columnas de tipo BYTE o TEXT.
FOREIGN KEY se utiliza para definir una columna o conjunto de columnas como una
clave externa, para propsitos de establecer relaciones o joins con otras tablas, en las que
deber haber una Primary Key para coincidir. Para eso se indica con la clusula
REFERENCES la tabla con la cual se est estableciendo la relacin, y sobre qu
columnas de la misma. Por lo tanto, las columnas referenciadas deben ser Primary Key o
-al menos- no contener valores duplicados o nulos (si no, reporta un error). No es vlida
sobre columnas de tipo BYTE o TEXT.
CHECK permite establecer condiciones que deben cumplir los datos antes de insertar o
actualizar una fila de la tabla. Se pueden establecer condiciones de comparacin, pero
no utilizar subqueries, usar funciones agregadas, identificador de fila, variables del host
ni funciones como USER, TODAY, etc.
CONSTRAINT se utiliza para generarle un nombre al constraint, por el que podr ser
luego invocado.
La forma general de una clusula Default es:
OL
Con ella se puede indicar un valor literal o nulo para una dada columna
CURRENT es vlida para datos del tipo DateTime, y asigna el valor del instante de
acuerdo a la precisin indicada.
USER asigna un literal con el nombre del usuario
TODAY asigna la fecha del da
11
12
ALTER TABLE
Descripcin
Esta sentencia se utiliza para insertar una columna en una tabla, borrar una columna de una
tabla, modificar el tipo de dato de una columna, agregar, modificar o eliminar un constraint.
Sintaxis
SE
ALTER TABLE { [Nombre-Tabla | Sinnimo] }
{ ADD (Nombre-Columna-Nueva Tipo-Dato [Clusula DEFAULT]
[NOT NULL] [Clusula CONSTRAINT]
[BEFORE Nombre-Columna-Existente][,...])
| DROP (Nombre-Columna-Vieja[,...] )
| MODIFY (Nombre-Col-Existente Tipo-Dato-Nuevo [Clusula DEFAULT]
[NOT NULL] [Clusula CONSTRAINT] [, ...])
| ADD CONSTRAINT [Clusula CONSTRAINT]
| DROP CONSTRAINT [(] Nombre-Constraint [,...)] }
OL | MODIFY NEXT SIZE kbytes
OL | LOCK MODE { ( PAGE | ROW ) }
La forma de la clusula Default es como la descripta anteriormente
En cuanto a la clusula Constraint, pesan algunas restricciones: no se puede definir una
Foreign Key, ni se puede agregar un constraint sobre columnas que ya tengan datos; si se
utiliza Unique, la tabla slo puede tener una fila.
No se puede agregar una columna de tipo Serial a una tabla si ya tiene filas.
La clusula Not Null se puede utilizar slo si la tabla est vaca.
Al eliminarse una columna, se eliminan los ndices o constraints definidos sobre ella.
Al modificar una columna, se eliminan las constraints definidas sobre ella. Si se desea
que permanezca alguna caracterstica (como default, not null, etc.), se deben reespecificar
en la clusula de modificacin. Se intenta la conversin de datos, aunque el xito de la
misma depende de qu tipos de datos estn involucrados.
13
RENAME TABLE
Descripcin
Esta sentencia se utiliza para cambiar el nombre de una tabla
Sintaxis
RENAME TABLE [Propietario.]Nombre-Viejo TO Nombre-Nuevo
Slo puede renombrar la tabla su propietario o aquel que tenga privilegio de DBA o de
Alter sobre la tabla.
No sirve consignar un nombre de Propietario para cambiarlo: produce un error.
En SE no sirve incluir esta sentencia en una transaccin (no se vuelve atrs).
DROP TABLE
Descripcin
Esta sentencia se utiliza para borrar una tabla, junto con sus datos
Sintaxis
DROP TABLE { Nombre-Tabla | Sinnimo }
Slo puede eliminar la tabla su propietario o aquel que tenga privilegio de DBA.
Al eliminar una tabla, se borran todos sus datos, ndices, constraints, sinnimos y vistas.
En SE no sirve incluir esta sentencia en una transaccin (no se vuelve atrs).
14
Vistas
Las vistas -views- son un nivel elevado de abstraccin de las bases de datos, que
proveen al usuario de una ventana de los datos existentes.
El usuario identifica una vista por un nombre, y la trata como a una tabla con
algunas restricciones.
Una vista puede contener columnas de ms de una tabla o valores resultantes de
funciones sobre las columnas.
Las vistas son ventanas dinmicas de la base de datos, marcando una diferencia
sustancial con las tablas temporarias, que slo muestran el estado de la base de datos al
momento que son creadas.
Habitualmente se utilizan las vistas para limitar el acceso a datos importantes, para
que los usuarios puedan consultar, actualizar, insertar o borrar datos en las tablas con las
restricciones que correspondan.
Las vistas pueden ser creadas o eliminadas en cualquier momento, y la informacin
de control es mantenida en los catlogos de sistema sysviews y syscolumns.
Las vistas pueden ser definidas en funcin de otras vistas. Cuando se elimina la
vista origen, se eliminan todas las que dependen de ella. Las consultas a travs de una vista
son tratadas como si fuesen sobre una tabla. A travs de las vistas se pueden hacer
inserciones, actualizaciones y borrados de las tablas con las siguientes consideraciones:
No se puede modificar la base de datos si la definicin de la vista incluye joins, clusula
GROUP BY, DISTINCT o UNIQUE o funciones agregadas.
Se puede construir un form sobre una vista si las columnas de la misma se refieren slo a
una tabla.
No se puede insertar filas a una tabla desde una vista con columnas virtuales, aunque s
se puede borrar una fila bajo esas condiciones.
No se pueden ejecutar ALTER TABLE, CREATE INDEX o UPDATE STATISTICS
sobre una vista. Se dispone de los ndices existentes sobre las columnas en las tablas
subyacentes.
Si se inserta una fila desde una vista con solo algunas columnas de la tabla, las dems
son completadas con NULL, salvo que esto no se permita. Si es as, no se puede insertar.
Si se eliminan columnas de la tabla usadas en la definicin de una vista, la misma deja
de ser til.
Para evitar inserciones o actualizaciones de los datos que escapen a las restricciones de
la definicin de la vista, es obligatorio crearla con la clausula WITH CHECK OPTION.
15
Hay que ser cuidadoso con las posibles filas duplicadas de una vista que se actualicen a
una tabla con filas nicas.
Privilegios en las Vistas
Al crear una vista, se reciben los mismos privilegios que los detentados sobre la
tabla subyacente. Si adems esta tabla se cre con la clusula WITH GRANT OPTION, se
pueden pasar estos privilegios a otros usuarios.
Si hay ms de una tabla en la construccin de la vista slo se dispone del privilegio
SELECT.
CREATE VIEW
Descripcion
Esta sentencia se utiliza para crear una nueva vista basada en tablas o vistas ya existentes
Sintaxis
CREATE VIEW Nombre-Vista [ (Lista-Columnas) ]
AS SELECT-Sentencia [WITH CHECK OPTION]
Una vista, como se indica ms arriba, puede ser usada como una tabla, salvo en las
siguientes sentencias: Alter Index, Alter Table, Create Index, Create Table, Drop Index,
Drop Table, Lock Table, Recover Table, Rename Table o Unlock Table.
Se debe tener el privilegio de Select sobre todas las columnas implicadas en la
definicin de una vista.
Los tipos de datos de las columnas de la vista se deducen de las columnas que le dan
origen.
DROP VIEW
Descripcin
Esta sentencia se utiliza para borrar una vista de una Base de Datos
Sintaxis
DROP VIEW { Nombre-Vista | Sinnimo }
Se debe ser el propietario de la vista o tener privilegio DBA.
Tambin se eliminan las vistas definidas a partir de ella.
En SE no sirve incluir esta sentencia en una transaccin (no se vuelve atrs).
CREATE SYNONYM
16
Descripcin
Esta sentencia se utiliza para propocionar un nombre alternativo a una tabla o a una vista.
Sintaxis
CREATE [PUBLIC | PRIVATE] SYNONYM Sinnimo
FOR [Nombre-Tabla | Nombre_Vista]
El modo default de creacin de un sinnimo es Public, por el cual se pone este sinnimo
a disposicin de todos los usuarios.
No se puede crear un sinnimo para un sinnimo.
En SE no sirve incluir esta sentencia en una transaccin (no se vuelve atrs).
En OL se puede crear un sinnimo para cualquier base de datos en el servidor de base
de datos, de la forma Nombre_BD:Nombre_tabla.
DROP SYNONYM
Descripcin
Esta sentencia se utiliza para remover un sinnimo previamente definido.
Sintaxis
DROP SYNONYM Sinnimo
Se debe ser el propietario del sinmimo o tener privilegio DBA para eliminarlo.
En SE no sirve incluir esta sentencia en una transaccin (no se vuelve atrs).
17
Estrategias de Indexacin
Hay dos razones bsicas para crear un ndice sobre columnas de una tabla en una
base de datos:
Acelerar el ordenamiento de filas
Optimizar la performance de los queries
Contar con ndices adecuados proporciona significativos ahorros de tiempo en los
queries que efectan los usuarios. Como contrapartida, las inserciones, borrados y
modificaciones de datos se tornan mas lentas, pues los ndices deben ser actualizados
convenientemente.
As resulta apropiado crear un ndice slo cuando es necesario y eliminarlo cuando
deja de serlo. Aunque esto es muy sencillo en este ambiente, conviene tener presentes
algunas consideraciones estratgicas.
Entonces al momento de indexar, valen las siguientes consideraciones:
No tienen sentido ndices para tablas de menos de 200 filas.
No indexar sobre columnas con pocos valores posibles -sexo, estado civil, etc.-. En
todo caso, puede tener sentido un ndice clustered -lo veremos ms adelante-.
Si la clusula WHERE de una sentencia SELECT impone condiciones sobre una
columna, crear un ndice sobre la misma. Si la condicin es sobre varias columnas,
conviene entonces un ndice compuesto sobre todas las columnas implicadas.
Si la clausula WHERE de una sentencia SELECT tiene un join entre una columna
simple de una tabla y una columna simple de otra tabla, crear un ndice sobre la
columna de la tabla con mayor nmero de filas. Si varias columnas de una tabla
tienen condiciones de join con varias columnas de otra tabla, crear un ndice
compuesto sobre las columnas implicadas de la tabla con mayor nmero de filas.
Para el uso de ciertos utilitarios -como DBLOAD o DBLINK- conviene eliminar
previamente los ndices existentes y luego regenerarlos.
Como comentario adicional, tener presente que, ante una sentencia SELECT que
incluya un join entre 2 tablas sin un ndice sobre las columnas implicadas, RDSQL crea un
ndice temporario por razones de optimizacin.
18
19
ALTER INDEX
Descripcin
Esta sentencia se utiliza para organizar fsicamente las filas de una tabla en el orden de un
ndice existente o para cancelar el atributo de clustering.
Sintaxis
ALTER INDEX Nombre-Indice TO [NOT] CLUSTER
20
UPDATE STATISTICS
Descripcin
Esta sentencia se utiliza para actualizar los datos en los system catalogs que se utilizan para
optimizar las estrategias de bsqueda y/o los stored procedures.
Sintaxis
UPDATE STATISTICS
[FOR {Nombre-Tabla|Sinnimo}]
[FOR PROCEDURE [Nombre_Procedure]]
21
Se puede dar un display label para cada columna, que aparecer como el
encabezamiento en la salida del Select, o como los nombres de las columnas de una
tabla temporaria.
Si se especifica una columna y una funcin agregada, la columna debe ser incluida en la
clusula GROUP BY.
<Clusula-From>
FROM [OUTER] Nombre-Tabla [Alias-Tabla] [,...][,...]
Indica de qu tablas se saca la informacin para esta sentencia.
Se puede especificar un alias para cada tabla, por el cual puede posteriormente ser
denominada. Ms an, en caso de los auto-join es necesario hacerlo.
OUTER permite hacer un outer join, que se explica brevemente a continuacin
Outer Joins
Un outer join entre 2 tablas las trata asimtricamente. Una de las tablas es la
dominante y la otra es la sirviente. Si esta ltima no tiene filas que satisfagan la condicin
de join, en la respuesta habr una fila con valores nulos acompaando a la fila de la tabla
dominante que no tenga proyeccin. Por ejemplo, si tenemos las columnas zona de la tabla
t1 y region de la tabla t2 con los siguientes valores:
t1.zona
2
7
9
t2.region
1
2
3
7
23
region
2
7
null
Condiciones de Comparacin
Condiciones de join
24
25
26
Clusula HAVING
HAVING Condicin
Se utiliza para aplicar condiciones de clasificacin a los grupos. Complementa la
clusula Where.
Si no se us la clusula GROUP BY, se asume todo como un solo grupo.
Clusula ORDER BY
ORDER BY Nombre-Columna [ASC|DESC] [,...]
Se utiliza para ordenar los resultados de la seleccin por los valores contenidos en una o
ms columnas, que deben figurar en la lista de seleccin.
En lugar del nombre de las columnas, se puede incluir el nmero que indica su orden de
aparicin en la lista de seleccin.
Clusula INTO TEMP
INTO TEMP Nombre-Tabla [WITH NO LOG]
Se utiliza para crear una tabla temporaria con los resultados de la seleccin.
La opcin WITH NO LOG es soportada en el modo ANSI, y tiene efecto slo si la base
tiene transaction log file.
Operador UNION
Se pueden unir dos o ms sentencias SELECT mediante el operador UNION:
Sentencia-SELECT UNION [ALL] Sentencia SELECT [UNION ... ]
El nmero de tem de la lista de seleccin de cada select debe ser igual, y los tipos de
datos corresponderse uno a uno.
Slo se puede usar una clusula ORDER BY en la ltima sentencia Select.
Slo se puede usar una clusula INTO TEMP en la ltima sentencia Select.
No se puede utilizar en un subquery o en la definicin de una vista.
27
Funciones Agregadas
Se dispone de ciertas funciones que agregan cierta informacin sobre las filas
seleccionadas por la clusula WHERE. Ellas son:
COUNT(*)
Retorna el nmero de filas
COUNT(DISTINCT x) Retorna el nmero de filas en las que la columna x tiene
valores distintos
SUM([ALL|
Retorna la suma de los valores de la columna x
DISTINCT] x )
AVG([ALL|
Retorna el promedio de los valores de la columna x
DISTINCT] x )
MAX([ALL|
Retorna el maximo de la columna x
DISTINCT] x)
MIN([ALL|
Retorna el minimo de la columna x
DISTINCT] x)
Funciones adicionales para la lista de seleccin
DATE (expr)
DAY (expr_fecha)
LENGTH (string)
MDY(exp1,exp2,exp3)
28
INSERT
Descripcin
Esta sentencia se utiliza para insertar una o ms filas nuevas en una tabla ya existente
Sintaxis
INSERT INTO Nombre-Tabla [( Lista-Columnas)]
{ VALUES (Lista-Valores)| SELECT -<Sentencia-Select> }
Los datos se insertan en las columnas en el orden especificado.
Si no se consignan los nombres de las columnas, se inserta un valor en cada columna, en
el orden de su definicin.
Si se inserta con una sentencia Select, los datos deben extraerse de otras tablas, y no se
puede usar la clusula INTO TEMP en la Select.
Al insertar, intenta convertir datos.
Para una columna de tipo Serial, ponga un 0 para que se encargue el SQL de generar el
nmero correspondiente. Si se insertan valores, no pueden ser repetidos.
Todas las filas implicadas en una insercin son locked durante su ejecucin. Si el
nmero de filas superara el mximo de locks simultneos, o bien se reduce la insercin o
se hace un lock sobre toda la tabla.
UPDATE
Descripcin
Esta sentencia se utiliza para modificar los valores de una o ms columnas en una o ms
filas de la tabla.
Sintaxis
UPDATE Nombre-Tabla SET {Nombre-Columna = Expr [,...] |
{(Lista-Columnas) | *}= (Lista-Expr)}
[WHERE Condicin]
Si se modifica con una sentencia Select, los datos deben extraerse de otras tablas, y no se
puede usar la clusula UNIQUE en la Select.
Al insertar, intenta convertir datos.
Todas las filas implicadas en una actualizacin son locked durante su ejecucin. Si el
nmero de filas superara el mximo de locks simultneos, o bien se reduce la
actualizacin o se hace un lock sobre toda la tabla.
29
DELETE
Descripcin
Esta sentencia se utiliza para borrar una o ms filas de una tabla
Sintaxis
DELETE FROM Nombre-Tabla [WHERE Condicin]
Todas las filas implicadas en un borrado son locked durante su ejecucin. Si el nmero
de filas superara el mximo de locks simultneos, o bien se reduce el borrado o se hace
un lock sobre toda la tabla.
30
31
puede usar la sentencia SET LOCK MODE TO WAIT, con lo que el SQL lo
retendr en espera hasta que las filas sean liberadas.
LOCK TABLE
Descripcin
Esta sentencia se utiliza para prohibir el acceso de otros usuarios a una determinada tabla.
Sintaxis
LOCK TABLE Nombre-Tabla IN {SHARE | EXCLUSIVE} MODE
Slo un lock por vez es admitido sobre una tabla.
Si se trabaja con transacciones, la sentencia COMMIT WORK cancela todos los locks
pendientes sobre la tabla.
UNLOCK TABLE
Descripcin
Esta sentencia se utiliza para liberar el acceso por otros usuarios a una determinada tabla
previamente denegado mediante una sentencia Lock Table.
Sintaxis
UNLOCK TABLE Nombre-Tabla
No se puede utilizar esta sentencia dentro de una transaccin.
32
REVOKE
Descripcin
Esta sentencia remueve los privilegios de acceso de usuario para una tabla, una base de
datos o un procedure.
Sintaxis
REVOKE Privil-Base-De-Datos FROM {PUBLIC | Lista-Usuarios}
REVOKE Privil-Tabla ON {Nombre-Tabla | Nombre-Vista | Sinnimo}
FROM {PUBLIC | Lista-Usuarios}
REVOKE EXECUTE ON Procedure FROM {PUBLIC | Lista-Usuarios}
Los Privilegios de Base de Datos y de Tablas son los mismos que en la sentencia anterior
34
Audit Trails
Un audit trail es un archivo que registra todos los cambios producidos en una tabla
de una base de datos.
Para iniciar un audit trail se usa la sentencia CREATE AUDIT. Puede hacerse en
cualquier momento, y produce que todas las operaciones que a continuacin se hagan sobre
la tabla sean registradas en l. Para eliminar un audit trail se usa la sentencia DROP
AUDIT.
Si hay un problema con una tabla que deba ser recuperada, el usuario puede hacerlo
mediante la sentencia RECOVER TABLE, una vez que levant la copia de back-up y
siempre que hubiera creado el audit trail justo antes de hacer el back-up.
Los audit trails no son muy utilizados por los incovenientes que traen aparejados:
Decrementan la performance del sistema.
Inciden en el nmero mximo de tablas abiertas simultneamente.
No proveen proteccin contra operaciones que involucran ms de una
tabla.
CREATE AUDIT
Descripcin
Esta sentencia se utiliza para crear un archivo de seguimiento de auditora y comenzar las
registraciones en el mismo.
Sintaxis
SE CREATE AUDIT FOR {Nombre-Tabla | Sinnimo} IN "pathname"
Se requiere tener el privilegio DBA o ser el propietario para usar esta sentencia.
En OL no est disponible, aunque est provisto por medio de los logs files.
DROP AUDIT
Descripcin
Esta sentencia se utiliza para borrar un archivo de seguimiento de auditora.
Sintaxis
SE DROP AUDIT FOR {Nombre-Tabla | Sinnimo}
Se requiere tener el privilegio DBA o ser el propietario para usar esta sentencia.
36
RECOVER TABLE
Descripcin
Esta sentencia se utiliza cuando ocurre una falla en el Sistema. Permite recuperar una tabla
de Base de Datos desde una copia backup y un archivo auditora
Sintaxis
SE RECOVER TABLE Nombre-Tabla
Se requiere tener el privilegio DBA o ser el propietario para usar esta sentencia.
BEGIN WORK
Descripcin
Esta sentencia se utiliza para comenzar una transaccin.
Sintaxis
BEGIN WORK
Cada fila afectada por una sentencia UPDATE, DELETE o INSERT durante una
transaccin es locked mientras no se cierra dicha transaccin.
En las bases de datos ANSI no es necesaria esta sentencia, pues las transacciones son
implcitas.
COMMIT WORK
Descripcin
Esta sentencia se utiliza para efectivizar todas las modificaciones hechas a la base de datos
desde la ltima sentencia BEGIN WORK.
Sintaxis
COMMIT WORK
Esta sentencia libera todas las filas y/o tablas involucradas en la transaccin.
37
ROLLBACK WORK
Descripcin
Esta sentencia se utiliza para cancelar todas las modificaciones hechas a la base de datos
desde la ltima sentencia BEGIN WORK, dejando la base de datos en el estado previo al
comienzo de la transaccin.
Sintaxis
ROLLBACK WORK
Esta sentencia libera todas las filas y/o tablas involucradas en la transaccin.
En SE no se deshacen aquellas sentencias que, an comprendidas en una transaccin,
afecten la definicin de las tablas o columnas, permisos, etc.
START DATABASE
Descripcin
Esta sentencia se utiliza para trabajar con un nuevo archivo de transaction log
Sintaxis
SE START DATABASE Nombre-Base-De-Datos WITH LOG IN "pathname"
[MODE ANSI]
En un server con SE se puede usar esta sentencia siempre que se tenga privilegio DBA,
no haya base de datos activa y que los directorios especificados en pathname existan.
Al ejecutar esta sentencia, la base de datos queda locked en modo exclusivo; hay que
hacer un Close Database para liberarla.
38
ROLLFORWARD DATABASE
Descripcin
Esta sentencia se utiliza para aplicar las transacciones registradas en el archivo de
transaction-log a una copia de backup de la base de datos para recuperar todas las
transacciones que estn completas.
Sintaxis
SE ROLLFORWARD DATABASE Nombre-Base-De-Datos
Para recuperar una base de datos bajo SE se necesitan tanto la copia de la base de datos
como el transaction log file iniciado inmediatamente despus que se hizo ese backup.
Se debe tener el privilegio DBA para hacerlo, y la base de datos debe estar previamente
cerrada.
Al ejecutar esta sentencia, la base de datos queda locked en modo exclusivo; hay que
hacer un Close Database para liberarla.
39
Sentencias Auxiliares
CHECK TABLE
Descripcin
Esta sentencia se utiliza para comparar una tabla con sus ndices para determinar si
coinciden. Se utiliza cuando se supone que los datos o los ndices se han corrompido por
alguna razn, tpicamente una terminacin anormal.
Sintaxis
SE CHECK TABLE Nombre-Tabla
Se debe contar con el privilegio DBA o ser el propietario para usar esta sentencia.
Esta sentencia utiliza un utilitario del SE, el bcheck, que puede ser invocado desde el
prompt.
REPAIR TABLE
Descripcin
Esta sentencia se utiliza para borrar y regenerar los ndices de una tabla previamente
chequeada con la sentencia CHECK TABLE.
Sintaxis
REPAIR TABLE Nombre-Tabla
Se debe contar con el privilegio DBA o ser el propietario para usar esta sentencia.
Esta sentencia utiliza un utilitario del SE, el bcheck, que puede ser invocado desde el
prompt.
40
LOAD
Descripcin
Esta sentencia se utiliza para cargar datos desde un archivo ASCII a una tabla, sinnimo o
vista de una Base de Datos existente.
Sintaxis
LOAD FROM Path-Name [DELIMITER caracter ]
INSERT INTO {Nombre-Tabla | Sinnimo | Nombre-Vista}
[(Nombre-Columna[,...])]
Se debe tener el privilegio de INSERT sobre la tabla para usar esta sentencia.
Si se est trabajando con transacciones, se debe ejecutar una sentencia BEGIN WORK
antes de la Load.
Esta sentencia agrega filas a la tabla, por lo que se puede producir error si se trata de
insertar filas con claves duplicadas cuando no est permitido.
El delimitador por default es la |, salvo que hubiera otro caracter especificado en la
variable DBDELIMITER.
El backslas (/) se usa como carcter de escape, por lo que no hay que usarlo como
delimitador.
UNLOAD
Descripcin
Esta sentencia se utiliza para grabar datos de una tabla de una base de datos a un archivo
ASCII
Sintaxis
UNLOAD TO Archivo [DELIMITER caracter ] <Sentencia Select>
Se debe contar con el privilegio de SELECT sobre todas las columnas implicadas en la
sentencia SELECT.
El delimitador por default es la |, salvo que hubiera otro caracter especificado en la
variable DBDELIMITER.
41
INFO
Descripcin
Esta sentencia se utiliza para mostrar algunas de las siguientes informaciones posibles:
Nombres de tablas en la base de datos actual
Columnas de una tabla
Indices para una tabla
Privilegios de acceso para una tabla
Privilegios de referencias para las columnas de una tabla
Estado de una tabla
Sintaxis
INFO {TABLES
OUTPUT
Descripcin
Esta sentencia se utiliza para escribir los resultados de un query a un archivo , mediante un
pipe, enviarlo a otro programa.
Sintaxis
OUTPUT TO { Nombre-Archivo | PIPE Programa } [WITHOUT HEADINGS]
<Sentencia-Select>
42
FORMS
Un FORM se especifica mediante un archivo con el layout de la pantalla y las
instrucciones que indican cmo mostrar y/o ingresar los datos. Puede tener varias pginas
de longitud y contener columnas de varias tablas.
Estructura
Un FORM consta de cuatro secciones que deben estar presentes (DATABASE,
SCREEN, TABLES y ATTRIBUTES) y una seccin opcional (INSTRUCTIONS). A
continuacin analizaremos cada una de las secciones.
Seccin DATABASE
DATABASE
nombre-base-de-datos [WITHOUT NULL INPUT]
Especifica la base de datos que se utilizar para trabajar con el FORM. Es la primera
seccin que debe estar presente.
without null input se utiliza cuando una base de datos no admite nulos. Muestra 0 para los
campos numricos y espacios para los caracteres.
Seccin SCREEN
SCREEN
{
....
display field layout de la pantalla
...
}
Puede haber varias pantallas definidas en esta seccin con un mximo de 20 lneas
para cada una. Si son ms, son automticamente divididas en dos. La forma de los display
field es la siguiente:
texto [fieldtag]
texto es lo que se muestra en la pantalla.
[] son los delimitadores del campo. El ancho del campo lo marcan la cantidad de espacios
entre los delimitadores.
field-tag es la identificacin del campo. Cada campo debe tener uno, y nada tienen que ver
con las columnas de las tablas.
43
|tag2
44
45
NOENTRY
Bloques de Control
Mediante el conjunto de instrucciones disponibles en este punto, se puede controlar
el movimiento del cursor ante operaciones ADD o UPDATE, chequear datos ingresados,
modificar datos despus de operaciones, efectuar clculos y guardar los resultados en otro
campo, mostrar informacin agregada, llamar a funciones en C. Cada bloque de control es
un bloque BEFORE o AFTER como veremos.
{BEFORE | AFTER} lista-opciones OF tabla/lista-columnas
accin
...
accin
Indica que se ejecute el conjunto de acciones antes o despus de que se ejecute una
operacin.
lista-opciones puede ser alguna de las siguientes: EDITADD, EDITUPDATE, ADD,
UPDATE, QUERY REMOVE o DISPLAY.
accin puede ser alguna de las siguientes: ABORT, LET, NEXTFIELD, COMMENTS o
IF-THEN-ELSE.
47
Reports
Un REPORT se especifica mediante un archivo con las instrucciones que
especifiquen los datos que contendr y el modo en que aparecern impresos.
Estructura
Un REPORT consta de tres secciones que deben estar presentes (DATABASE,
SELECT y FORMAT) y tres secciones opcionales (DEFINE, INPUT y OUTPUT). A
continuacin analizaremos cada una de las secciones.
Seccin DATABASE
DATABASE
Nombre-Base-de-Datos
END
Especifica la base de datos que se utilizar como la base para el reporte. Es la
primera seccin que debe estar presente.
Seccin DEFINE
DEFINE
PARAM sentencias
VARIABLE sentencias
END
Si est presente, en esta seccin se declaran las variables usadas en el REPORT y
los parmetros que puede recibir desde la lnea de comandos. La sintaxis de ambas es:
PARAM [num-arg] nombre-variable tipo-de-dato
num-arg: es la posicin del argumento en la lnea de comandos.
VARIABLE nombre-variable tipo-de-dato
Se pueden definir hasta 100 variables entre ambos.
Si se va a utilizar una de las variables definidas en esta seccin en la seccin
SELECT, debe estar precedida con un signo $.
48
Seccin INPUT
INPUT
PROMPT FOR sentencias
END
Si est presente, esta seccin permite al usuario interactuar durante la emisin del
REPORT permitiendo el ingreso de datos.
PROMPT FOR nombre-variable USING "string"
"string": es el mensaje que le aparece al usuario. Debe ir entre comillas. Puede haber ms
de una sentencia PROMPT FOR en esta seccin.
Seccin OUTPUT
OUTPUT
REPORT TO {PRINTER | "nombre-archivo"}
LEFT MARGIN integer
RIGHT MARGIN integer
TOP MARGIN integer
BOTTOM MARGIN integer
PAGE LENGTH integer
END
Si est presente, esta seccin permite controlar los mrgenes derecho, izquierdo,
superior e inferior, el largo de pgina y el dispositivo de salida.
Los valores default son:
Margen Izquierdo=
5
Margen Derecho=
132
Margen Superior=
3
Margen Inferior=
3
Longitud de Pgina= 66
49
Seccin SELECT
select sentencia;
....
select sentencia;
end
Esta seccin debe estar presente. Especifica las columnas y/o las tablas en las que se
basa el REPORT. Adems, puede indicar criterios de ordenamiento de las filas. Puede haber
mltiples sentencias SELECT -en sus formas habituales-, separadas por ;. En caso de
mltiples sentencias SELECT, todas excepto la ltima deben contener la clusula INTO
TEMP, y slo la ltima puede tener la clusula ORDER BY.
Seccin FORMAT
Debe estar presente, ya que determina el modo en que aparece el reporte. Trabaja
con los datos producidos por la seccin SELECT.
Hay dos formas tpicas para esta seccin, mutuamente excluyentes:
FORMAT
EVERY ROW sentencia
END
Es la ms sencilla. Produce un REPORT default, ya que lista los datos encabezados
por el nombre de las columnas.
FORMAT
PAGE HEADER bloque-de-control
PAGE TRAILER bloque-de-control
FIRST PAGE HEADER bloque-de-control
ON EVERY ROW bloque-de-control
ON LAST ROW bloque-de-control
BEFORE GROUP OF nombre-variable bloque-de-control
AFTER GROUP OF nombre-variable bloque-de-control
END REPORT
Mediante los bloques-de-control se pueden indicar encabezamientos, pies de
pgina, qu hacer en cada fila, en la ltima, antes o despus de cada grupo de filas, etc.
Cada bloque es opcional, pero al menos uno debe estar presente. Adems, cada bloque debe
incluir al menos una sentencia.
50
while exp do
sentencia
51
Funciones Agregadas
Hay un conjunto de funciones agregadas que permiten sumarizar informacin en un
Report.
[GROUP]
{ COUNT | PERCENT |
{ { TOTAL | { AVERAGE | AVG } | MIN | MAX } OF expr1 } }
[WHERE expr2]
GROUP
COUNT
PERCENT
TOTAL
AVERAGE/
AVG
MIN
MAX
expr1
Por ltimo, hay una serie de funciones que se utilizan al momento de impresin y
que proveen determinadas funciones auxiliares. Ellas son:
ASCII num-expr
MDY(num-exp1,
num-exp2, numexp3)
MONTHdateexpr
PAGENO
num-expr SPACE[S]
TIME
TODAY
expr1 USING expr2
WEEKDAY(dateexpr)
YEAR(date-expr)
53
Trabajos Practicos
PRACTICA I
1. Crear a travs de los menes la base de datos PRACTICA y las siguientes tablas, con
los ndices que se indiquen segn la estructura consignada:
Tabla CLIENTE
Nombre Campo Tipo
Nro_Cliente
Serial
Nombre
Char(15)
Apellido
Char(15)
Compania
Char(20)
Direccion
Char(20)
Cod_Pos
SmallInt
Cod_Provi
Integer
Telefono
Char(15)
Indices: Nro_Cliente, sin duplicaciones
Tabla NOTAS_CLIENTE
Nombre Campo Tipo
Nro_Cliente
Integer
Referencia
Char(30)
Indices: Nro_Cliente, con duplicaciones
Tabla PROVI
Nombre Campo Tipo
Cod_Provi
Serial
Nom_Provi
Char(20)
2. Modifique la Tabla CLIENTES incorporando la columna Localidad Char(10) de modo
que aparezca antes de Cod_Pos.
3. Crear mediante comandos las siguientes tablas, con los ndices que se indiquen segn la
estructura consignada:
54
Tabla PROVEEDOR
Nombre Campo Tipo
Cod_Prov
Smallint
Nom_Provi
Char(20)
Indices: Cod_Prov, sin duplicaciones
Tabla ORDENES
Nombre Campo
Tipo
Nro_Orden
Serial
Fecha_Orden
Date
Nro_Cliente
Integer
Instr_Envio
Char(20)
Fecha_Envio
Date
Precio_Envio Money(10,2)
Fecha_Pago
Date
Tipo
SmallInt
Integer
SmallInt
SmallInt
Integer
55
Tabla STOCK
Nombre Campo
Tipo
Nro_Stock
SmallInt
Cod_Prov
SmallInt
Descripcion
Char(20)
Precio_Unit
Money(10,2)
Cod_Uni
Char(3)
Indices: Nro_Stock, Cod_Prov, sin duplicaciones
Tabla UNIDAD
Nombre Campo
Cod_Uni
Desc_Uni
Tipo
Char(3)
Char(20)
56
57
PRACTICA III
1. Seleccionar todos los datos de CLIENTES.
2. Listar el cdigo de la provincia BUENOS AIRES.
3. Seleccionar los item cuyo nmero de item sea mayor que 2.
4. Listar los clientes que vivan en CAPITAL.
5. Seleccionar los productos cuyo cdigo de proveedor sea 3 y su precio unitario menor
que 30.
6. Listar los clientes que no tengan telefono.
7. Listar la descripcin cdigo de proveedor y nmeros de stock de los productos que
empiecen con "P".
8. Listar las provincias que comiencen con "SA".
9. Listar nmero de stock cdigo de proveedor y descripcin de los artculos cuya
descripcin termine con "TENIS" o comience con "B".
10. Listar los clientes cuyo nombre empiece con "M" o "A" o que termine con "S".
11. Listar nmero de orden y nmero de cliente de aquellas ordenes cuya fecha de pago
supere a la fecha de envo en ms de 2 das.
12. Listar el stock ordenado por cdigo de artculo.
13. Listar las ordenes de abril ordenadas por nmero de orden.
58
PRACTICA IV
1. Seleccionar todos los datos de STOCK y PROVEEDOR.
2. Listar nmero de stock, cdigo de proveedor, descripcin y precio unitario de los
artculos de STOCK.
3. Listar nmero de cliente, nombre, apellido, direccin, provincia y cdigo postal de
CLIENTES.
4. Listar nmero de item, nmero de orden, nmero de stock, descripcin, cdigo de
proveedor y nombre del proveedor ordenado por nmero de item.
5. Idem 4 donde la cantidad supere las 300 unidades.
6. Imprimir para cada cliente las ordenes que tenga asociadas
7. Imprimir para cada orden los item que la forman ordenados por fecha de orden.
8. Imprimir nmero de orden, fecha, nombre del cliente y total de la orden para aquellas
ordenes cuyo total exceda las 250 unidades.
9. Imprimir la descripcin y precio unitario de los artculos de STOCK cuyo cdigo de
proveedor sea 1, ordenados por nmero de stock.
10. Listar las ordenes de cada cliente con nmero de cliente, nombre, nmero de orden,
monto total de la orden, ordenado por nmero de cliente para aquellas rdenes cuyo monto
total sea superior a 200.
11. Determinar el producto ms vendido indicando su nmero de stock, descripcin y
proveedor.
12. Determinar cul es el artculo de mayor precio unitario y cul es el promedio de pedidos
para ese artculo.
59
PRACTICA V -REPORTS1. Generar un REPORT default sobre STOCK y modificarlo para que salga ordenado por
nmero de stock y, en caso de igualdad por nmero de proveedor.
2. Modificar el reporte para que el largo de hoja sea de 72, el margen superior de 3 lneas,
el inferior de 2 y los mrgenes derecho e izquierdo de 4 espacios.
3. Agregar ttulos y encolumnar el REPORT.
4. Mostrar el nmero de pgina en el centro de la hoja en la ltima lnea antes de cambiar
de pgina.
5. Imprimir la cantidad total de artculos listados al final del REPORT.
6. Producir el mismo REPORT pero con cortes de control por cdigo de proveedor
imprimiendo la cantidad de artculos que provee cada uno.
7. Imprimir los clientes incluyendo la provincia donde viven y sus referencias con corte de
control por provincia.
8. Emitir un REPORT a pantalla que muestre por pginas todas las ordenes de compra
efectuadas por los clientes ordenadas por fecha de emisin con corte por cliente. Antes de
cada grupo de rdenes imprimir el nmero y el nombre del cliente y despus la cantidad de
rdenes efectuadas por cada uno y el monto total.
9. Imprimir un REPORT al archivo SALIDA con las rdenes de compra con los item que la
conforman, el nmero de stock, la descripcin el cdigo y nombre del proveedor, la
cantidad pedida por item y la cantidad total de la orden. Imprimirlo ordenado por nmero
de orden con los ttulos adecuados y con el nmero de la hoja en el margen superior
derecho.
60