Académique Documents
Professionnel Documents
Culture Documents
Con el presente artculo quiero trasmitir mis impresiones de cuando empec a trabajar con Oracle versin 6.0 (Sistema de Administracin de Base de Datos Relacional RDBMS), luego de aos de programacin en Clipper, del cual haba heredado una filosofa que result ser muy diferente a la que se me presentara en Oracle, y de lo que no era muy consciente en sus inicios. Mi intencin no es comparar ambos sistemas, sino trasmitir todo lo que me result novedoso o diferente en Oracle con respecto al esquema de programacin de Clipper y, de esta forma, tratar de dar una primera respuesta, de forma elemental, a la pregunta que siempre me hacen mis colegas de Clipper Cules son las diferencias fundamentales del ORACLE con Clipper? Mi experiencia en Oracle comenz con la realizacin de un diseo del sistema y su programacin en DOS, monousuario. Posteriormente tuve que realizar la migracin de fuentes y la correspondiente compilacin e implementar el Sistema en UNIX, en una red con 8 terminales y 3 impresoras.
1
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - Grupo EIDOS
predefinido), que se ir llenando con el crecimiento del sistema, y a este espacio se le puede incorporar nuevos archivos en la medida que se necesiten. Oracle se caracteriza por poseer un concepto de Base de Datos diferente al de Clipper, ya que existe una nica Base de Datos, representada por uno o varios espacios de tablas que a su vez pueden estar compuestos por uno o ms archivos. De esta forma, Oracle usa los archivos como parte de un esquema de organizacin basado en los llamados espacios de tablas. Un espacio de tabla es un rea del disco representada por uno o ms archivos con tamao prefijado. En caso de llenarse los archivos que componen el espacio de tabla, ste se amplia con la adicin de un nuevo archivo. Uno o ms espacios de tablas componen la Base de Datos. Cuando se comienza a trabajar en Oracle es muy comn que se tienda a confundir el concepto de espacio de tabla con el de directorio, conceptos que son diferentes, ya que en un mismo directorio podran existir archivos de distintos espacios de tabla y, por otro lado, un espacio de tabla puede estar compuesto de archivos ubicados en diferentes directorios e, inclusive, en diferentes discos. De esta forma la base de datos en Oracle se organiza como se muestra en la tabal 1:
Espacio
DBS1.ORA
Espacio
Es importante destacar que Oracle permite el mantenimiento de los espacios de tabla de una forma relativamente fcil. Para la creacin y ampliacin de los espacios de tablas en Oracle existen una relacin de mandatos, los cuales se exponen en la tabla 2:
2
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - Grupo EIDOS
Creacin del Espacio de Tablas: CREATE TABLESPACE contabilidad DATAFILE 'C:CONT1' SIZE 2 M; Ampliacin del Espacio de Tablas (adicin de un nuevo archivo): ALTER TABLESPACE contabilidad ADD DATAFILE 'C:CONT2.ORA' SIZE 1 M; Creacin de tablas: CREATE TABLE clientes ( numero number(5), nombre char(30), direccion char(100)); CREATE TABLE ventas ( numero number(5), fecha date, articulo char(10), valor number(10,2)); Modificacin de tablas: -Adicionar un campo: ALTER TABLE cliente ADD (tipo NUMBER(2)); -Ampliar la longitud del campo: ALTER TABLE cliente MODIFY (direccion CHAR(150)); Descripcin de tablas: DESCRIBE clientes; Tabla 2: Comandos sql para el mantenimiento de espacios y de tablas:
En esta forma de organizacin de datos es posible obtener un listado de las tablas e ndices que componen el sistema, as como conocer qu espacio est realmente ocupado dentro del reservado en los archivos del espacio de tabla. Para ello, basta con acceder al sistema Oracle con la identificacin correspondiente y hacer una consulta SQL, del tipo SELECT, en una tabla del Diccionario (ALL_OBJECTS) del Sistema que contenga registrados todos los objetos que componen dicho sistema. El siguiente ejemplo nos muestra cmo se puede obtener la lista de Tablas pertenecientes a un usuario.
SELECT OBJECT_NAME "NOMBRE TABLA" FROM ALL_OBJECTS WHERE OBJECT_TYPE='TABLE' AND OWNER='usuario' ;
3
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - Grupo EIDOS
ndices
Tambin en el tratamiento de los ndices las diferencias entre Oracle y Clipper son notorias para un principiante. La forma de manejo de los ndices en Oracle se realiza de forma inteligente. Afirmamos esto porque, para ello, basta con que el programador cree los ndices y, una vez creados, no sea necesario abrirlos (o activarlos) para realizar una consulta, sino que ser el propio sistema, al analizar la condicin de la consulta (WHERE), el que seleccione automticamente el ndice que debe usar. Como se muestra en los siguientes ejemplos, la sintaxis que hay que seguir para la creacin de ndices es muy simple. Creacin de ndices:
CREATE INDEX UNIQUE numero ON clientes(numero) CREATE INDEX fecha ON ventas (fecha,articulo)
SELECT OBJECT_NAME "NDICE" FROM ALL_OBJECTS WHERE OBJECT_TYPE='INDEX' AND OWNER='usuario' ORDER BY OBJECT_NAME ;
Como si todas estas bondades fueran poco, los ndices de Oracle son muy fiables, pue existe una gran seguridad en su uso y, aunque es raro que en Oracle un ndice se dae y deje de trabajar, se dispone de una orden para la validacin de ndices (VALIDATE INDEX), la cual, una vez ejecutada, comprueba la seguridad del ndice y, de existir algn problema, lo reconstruye.
Mdulos y ejecutable
Estos dos elementos son destacables para quienes vienen de lenguajes como Clipper, pues Oracle (que es 100% compatible con IBM DB2 SQL) est compuesto por varios mdulos, entre los cuales se destacan, por su importancia, los siguientes:
Ncleo del sistema. Interfaz para la creacin y mantenimiento de tablas y listados simples. Diseo de Mens. Diseador de Forms. Generador de informes.
Tambin existen otros mdulos opcionales, que amplan las posibilidades del Oracle como son:
Carga datos de archivos externos, con formato ASCII, en las tablas de Oracle. Diseo grfico. Planilla de clculo.
4
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - Grupo EIDOS
SqlNet ProProduct
Permite que dos o ms servidores ejecuten Oracle para intercambiar datos a travs de la red. Preprocesadores para lenguajes de programacin como C, Pascal, ADA y Cobol.
Es importante destacar que cada mdulo genera un ejecutable simblico, que es una versin comprimida del archivo fuente. En Oracle el ejecutable no es un archivo .EXE que se puede distribuir independientemente como en Clipper, sino que es un conjunto de archivos compilados que, para su ejecucin, requieren del correspondiente runtime. Por ejemplo, veamos la tabla 3.
Archivo Ejecutable Mdulo Runtime Men *.DMM Runmenu Forms *.FRM Runform Reportes *.REP Runrep Tabla 3: Runtimes para los distintos ejecutables
SELECT nombre,fecha FROM clientes,ventas WHERE articulo='DISKETTE' AND clientes.numero=ventas.numero ORDER BY nombre,fecha ;
Otro tipo de consulta de uso comn es la que depende de una anterior (subconsulta). En el prximo ejemplo usamos la subconsulta para listar el nombre y direccin de clientes con ventas superiores al valor medio.
SELECT nombre,valor FROM clientes,ventas WHERE clientes.numero=ventas.numero and valor>=(select avg(valor) from ventas ) ORDER BY nombre ;
5
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - Grupo EIDOS
Programacin
Como era de suponer, la programacin es otro de los aspectos distintos entre Clipper y Oracle. La programacin en Oracle se hace a travs del diseo de pantallas (forms), donde una de la herramientas fundamentales son los trigger o disparadores de teclas o eventos. El sistema trae incorporado una importante cantidad de procedimientos y funciones que se disparan con la ocurrencia de ciertos eventos o pulsacin de determinadas teclas. Por ejemplo, el evento de insertar un registro dispara un procedimiento con determinados controles, y el uso de la tecla [F9] permite consultar la tabla de cdigos de un campo con slo especificar cul es la tabla que los contiene, pudiendo, de esta forma, acceder a la lista de cdigo sin necesidad de programar un procedimiento especfico que controle esta situacin. El trigger de teclas tiene una funcionalidad parecida a la del mandato SET KEY (o la funcin SetKey()) de Clipper, que invoca un procedimiento (o evala un CodeBlock) a partir de la pulsacin de una tecla, pero con la particularidad de que en Oracle, nada ms comenzar, cada tecla tiene asociado un procedimiento empaquetado definido por el propio sistema. El usuario puede redefinir esta asignacin de procedimientos o puede asignar sus propios procedimientos a una tecla. A continuacin mostramos una lista de funciones que las teclas tienen asociadas en las forms: [F3] [F4] [F5] [F6] [F7] [F8] [F9] [F10] Repite valor del campo del registro anterior. Repite todos los campos del registro anterior. Ir al men. Insertar un nuevo registro. Ingresar datos para una consulta. Realizar la consulta. Lista de cdigos del campo. Validar las modificaciones.
Como se puede observar, el sistema ya tiene incorporadas las tareas ms rutinarias y que siempre se suelen necesitar, lo que permite al programador concentrarse en la tarea de redefinir teclas (si fuese necesario) o en capturar los disparadores (para ampliarlos o modificarlos), lo que implica un ahorro importante de tiempo de programacin. El lenguaje procedural de Oracle para SQL es el PL/SQL, y est basado en la construccin de bloques (Begin ... End) contando, asimismo, con una seccin para el control de excepciones. Veamos un cdigo comn en PL/SQL con el ejemplo del fuente 1. En l, al ingresar en una consulta de un cdigo de artculo en la variable xCodigo, se hace un control de la existencia del cdigo y, de ser vlido, se muestra el nombre del artculo en la variable xNombre.
/* --- Fuente 1 -------------------------------------------------------- */ BEGIN /* Bloque para el control del ingreso correcto del cdigo */ SELECT nombre INTO :xnombre FROM artculos WHERE cdigo=:xcodigo ; message('Cdigo Correcto'); ... EXCEPTION
6
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - Grupo EIDOS
Empresa EMPRESA A
EMPRESA B
DISKETTE PAPEL
$300.00 $330.00
Artculo Total -------------DISKETTE $300.00 PAPEL $330.00 Tabla 4: informe del tipo Master - Detalle -Total
La creacin de este informe se realiza con la definicin de tres consultas, relacionadas entre s por el nmero del cliente: Q_CLIENTE : Identificar el cliente. Q_VENTAS : Listar para cada cliente y cada artculo su fecha y valor de venta. Q_TOTAL : Sumar los valores de ventas agrupados por el nmero del cliente y artculo.
select numero,nombre
7
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - Grupo EIDOS
A cada consulta se le asigna un GRUPO para definir la forma de impresin (Down, Across, Crosstab), la posicin relativa (a la derecha o abajo), la cantidad de lneas y espacios, la separacin entre registros y otros. En la tabla 5 y 6 se ve todo lo expuesto.
Group Name Query G_CLIENTE Q_CLIENTE G_VENTAS Q_VENTAS G_TOTAL Q_TOTAL Tabla 5: Formas de impresin
Relative Position
Lines Before
Spaces Before 2
Spacing Record 2
8
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - Grupo EIDOS
Esta forma de trabajo hace que la tarea de diseo de informes, que para m era de las menos gratas en Clipper, pasar a ser de las ms distendidas. En este artculo slo he enumerado algunos de los aspectos ms destacados de Oracle. Si es de inters para los lectores podramos comenzar una serie de artculos para adentrarnos en el mundo Oracle.
9
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - Grupo EIDOS