You are on page 1of 9

Organizándonos con Oracle

Por Sonia Benvenuto

Con el presente artículo quiero trasmitir mis impresiones de cuando empecé a trabajar con Oracle versión 6.0 (Sistema de Administración de Base de Datos Relacional RDBMS), luego de años de programación en Clipper, del cual había heredado una filosofía que resultó ser muy diferente a la que se me presentaría en Oracle, y de lo que no era muy consciente en sus inicios. Mi intención no es comparar ambos sistemas, sino trasmitir todo lo que me resultó novedoso o diferente en Oracle con respecto al esquema de programación 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 ¿Cuáles son las diferencias fundamentales del ORACLE con Clipper? Mi experiencia en Oracle comenzó con la realización de un diseño del sistema y su programación en DOS, monousuario. Posteriormente tuve que realizar la migración de fuentes y la correspondiente compilación e implementar el Sistema en UNIX, en una red con 8 terminales y 3 impresoras.

Forma de organización de datos
La primera, para los que empiezan a trabajar con Oracle, es que no se pueden realizar consultas desde el Sistema Operativo, tipo DIR (DOS) o ls (UNIX), el listado de los archivos de datos o el de los índices que componían el sistema (archivos .DBF o .NTX del Clipper). Por lo tanto el primer “gran descubrimiento”, fue constatar la forma en que Oracle, a diferencia de Clipper, almacena y organiza los datos. Normalmente en Clipper trabajamos con archivos que contienen un mismo tipo de información, a la vez que el tamaño no está fijado previamente, sino que va variando en la media que se añade información al mismo. En el caso de Oracle la situación es muy diferente, ya que el archivo tiene dos particularidades: 1.- Contiene información de distinto tipo. En un mismo archivo se registra información de todos los tipos de objetos que componen la Base de Datos: Tablas del usuario (.DBF de Clipper). Índices (.NTX de Clipper). Menúes. Pantallas (forms). Reportes. Diccionario (tablas del sistema). La forma de almacenar y organizar la información se basa en el concepto de que cada estructura de información no es un archivo, como sucede en Clipper con los .DBF, sino que toda la información de la Base de Datos esta en un mismo archivo. Cada estructura de información se denomina tabla, las que junto a los índices y al diccionario de datos del sistema componen la Base de Datos. 2.- Tienen un tamaño prefijado. Esta forma de almacenamiento de Oracle exige que se creen los llamados "espacios de tablas" donde se define un archivo al cual se le reserva una capacidad máxima (tamaño

1
Algoritmo. La revista para el programador de sistemas de bases de datos. http://www.eidos.es - © Grupo EIDOS

En caso de llenarse los archivos que componen el espacio de tabla. que se irá llenando con el crecimiento del sistema. ya que existe una única Base de Datos. inclusive. Un espacio de tabla es un área del disco representada por uno o más archivos con tamaño prefijado.eidos.es . y a este espacio se le puede incorporar nuevos archivos en la medida que se necesiten. en diferentes discos. http://www. De esta forma la base de datos en Oracle se organiza como se muestra en la tabal 1: Espacio System Archivo Contabilidad Archivos DBS1. por otro lado. representada por uno o varios espacios de tablas que a su vez pueden estar compuestos por uno o más archivos. Uno o más espacios de tablas componen la Base de Datos. Oracle se caracteriza por poseer un concepto de Base de Datos diferente al de Clipper. éste se amplia con la adición de un nuevo archivo. Oracle usa los archivos como parte de un esquema de organización basado en los llamados espacios de tablas. La revista para el programador de sistemas de bases de datos. un espacio de tabla puede estar compuesto de archivos ubicados en diferentes directorios e.ORA CONT2. Para la creación y ampliación de los espacios de tablas en Oracle existen una relación de mandatos. Cuando se comienza a trabajar en Oracle es muy común que se tienda a confundir el concepto de espacio de tabla con el de directorio. De esta forma. ya que en un mismo directorio podrían existir archivos de distintos espacios de tabla y. conceptos que son diferentes.ORA Tabla 1: Base de datos EMPRESA Es importante destacar que Oracle permite el mantenimiento de los espacios de tabla de una forma relativamente fácil. los cuales se exponen en la tabla 2: 2 Algoritmo.predefinido).© Grupo EIDOS .ORA Espacio CONT1.

del tipo SELECT. fecha date.2)). nombre char(30). basta con acceder al sistema Oracle con la identificación correspondiente y hacer una consulta SQL.es . Descripción de tablas: DESCRIBE clientes. valor number(10. Modificación de tablas: -Adicionar un campo: ALTER TABLE cliente ADD (tipo NUMBER(2)). Para ello. direccion char(100)). Ampliación del Espacio de Tablas (adición de un nuevo archivo): ALTER TABLESPACE contabilidad ADD DATAFILE 'C:CONT2. CREATE TABLE ventas ( numero number(5).ORA' SIZE 1 M. http://www.eidos. 3 Algoritmo. La revista para el programador de sistemas de bases de datos. así como conocer qué espacio está realmente ocupado dentro del reservado en los archivos del espacio de tabla. SELECT OBJECT_NAME "NOMBRE TABLA" FROM ALL_OBJECTS WHERE OBJECT_TYPE='TABLE' AND OWNER='usuario' . en una tabla del Diccionario (ALL_OBJECTS) del Sistema que contenga registrados todos los objetos que componen dicho sistema. El siguiente ejemplo nos muestra cómo se puede obtener la lista de Tablas pertenecientes a un usuario.Creación del Espacio de Tablas: CREATE TABLESPACE contabilidad DATAFILE 'C:CONT1' SIZE 2 M. -Ampliar la longitud del campo: ALTER TABLE cliente MODIFY (direccion CHAR(150)). Tabla 2: Comandos sql para el mantenimiento de espacios y de tablas: En esta forma de organización de datos es posible obtener un listado de las tablas e índices que componen el sistema. Creación de tablas: CREATE TABLE clientes ( numero number(5).© Grupo EIDOS . articulo char(10).

entre los cuales se destacan. no sea necesario abrirlos (o activarlos) para realizar una consulta. Diseñador de Forms. una vez creados. la cual. Afirmamos esto porque. Interfaz para la creación y mantenimiento de tablas y listados simples.eidos.© Grupo EIDOS . 4 Algoritmo. Generador de informes. una vez ejecutada. pue existe una gran seguridad en su uso y. se dispone de una orden para la validación de índices (VALIDATE INDEX). por su importancia. los índices de Oracle son muy fiables.es .Índices También en el tratamiento de los índices las diferencias entre Oracle y Clipper son notorias para un principiante. el que seleccione automáticamente el índice que debe usar. los siguientes: RDBMS: SqlPlus: SqlMenu: SqlForms: SqlReport: Núcleo del sistema. Como si todas estas bondades fueran poco. que amplían las posibilidades del Oracle como son: SqlLoad SqlGraph SqlCalc Carga datos de archivos externos. http://www. La forma de manejo de los índices en Oracle se realiza de forma inteligente. Diseño de Menús. Como se muestra en los siguientes ejemplos. comprueba la seguridad del índice y. Diseño gráfico. lo reconstruye. con formato ASCII. en las tablas de Oracle. de existir algún problema. Planilla de cálculo. aunque es raro que en Oracle un índice se dañe y deje de trabajar. Módulos y ejecutable Estos dos elementos son destacables para quienes vienen de lenguajes como Clipper. al analizar la condición de la consulta (WHERE). La revista para el programador de sistemas de bases de datos. para ello. También existen otros módulos opcionales. Creación de Índices: CREATE INDEX UNIQUE numero ON clientes(numero) CREATE INDEX fecha ON ventas (fecha. pues Oracle (que es 100% compatible con IBM DB2 SQL) está compuesto por varios módulos.articulo) Lista de Índices creados por un usuario: SELECT OBJECT_NAME "ÍNDICE" FROM ALL_OBJECTS WHERE OBJECT_TYPE='INDEX' AND OWNER='usuario' ORDER BY OBJECT_NAME . la sintaxis que hay que seguir para la creación de índices es muy simple. sino que será el propio sistema. basta con que el programador cree los índices y.

sino que es un conjunto de archivos compilados que.fecha . http://www.valor FROM clientes. 5 Algoritmo.DMM Runmenu Forms *.EXE que se puede distribuir independientemente como en Clipper. ADA y Cobol. para su ejecución.eidos. pueden incluir subconsultas a la consulta principal. En Oracle el ejecutable no es un archivo . en el cual se desea obtener. Archivo Ejecutable Módulo Runtime Menú *. SELECT nombre.ventas WHERE clientes.es . Es importante destacar que cada módulo genera un ejecutable simbólico. Otro tipo de consulta de uso común es la que depende de una anterior (subconsulta). El código de la consulta es: SELECT nombre. el nombre de los clientes y las fechas de ventas de un artículo determinado. a su vez. que es una versión comprimida del archivo fuente. En esta consulta se relacionan dos tabla por el número del cliente.numero=ventas. que exigen el cumplimiento de varias condiciones y que. requieren del correspondiente runtime. consultas complejas que involucran varias tablas simultáneamente. La revista para el programador de sistemas de bases de datos. En el próximo ejemplo usamos la subconsulta para listar el nombre y dirección de clientes con ventas superiores al valor medio. Lo que en Clipper requiere muchas líneas de programación (como por ejemplo la consulta de una o varias tablas al mismo tiempo) en Oracle se puede escribir en unas pocas.numero=ventas.REP Runrep Tabla 3: Runtimes para los distintos ejecutables Potencia del SQL El lenguaje SQL (que es el ANSI para manejo de bases de datos relacionales) es muy potente: entre otras operaciones permite hacer.numero and valor>=(select avg(valor) from ventas ) ORDER BY nombre .© Grupo EIDOS . Preprocesadores para lenguajes de programación como C. La mejor forma de mostrar esto es a través del siguiente ejemplo.SqlNet ProProduct Permite que dos o más servidores ejecuten Oracle para intercambiar datos a través de la red. Pascal.FRM Runform Reportes *. de forma fácil y sencilla.numero ORDER BY nombre. veamos la tabla 3.fecha FROM clientes. Por ejemplo. simultáneamente.ventas WHERE articulo='DISKETTE' AND clientes.

que invoca un procedimiento (o evalúa un CodeBlock) a partir de la pulsación de una tecla. se muestra el nombre del artículo en la variable xNombre. asimismo. acceder a la lista de código sin necesidad de programar un procedimiento específico que controle esta situación. La revista para el programador de sistemas de bases de datos.es . Veamos un código común en PL/SQL con el ejemplo del fuente 1. y el uso de la tecla [F9] permite consultar la tabla de códigos de un campo con sólo especificar cuál es la tabla que los contiene.Fuente 1 -------------------------------------------------------. pero con la particularidad de que en Oracle. Insertar un nuevo registro. EXCEPTION 6 Algoritmo.© Grupo EIDOS . /* --. con una sección para el control de excepciones. de esta forma.. se hace un control de la existencia del código y. Por ejemplo. Como se puede observar. Lista de códigos del campo.. cada tecla tiene asociado un procedimiento empaquetado definido por el propio sistema. Validar las modificaciones. lo que permite al programador concentrarse en la tarea de redefinir teclas (si fuese necesario) o en capturar los disparadores (para ampliarlos o modificarlos). donde una de la herramientas fundamentales son los trigger o disparadores de teclas o eventos. al ingresar en una consulta de un código de artículo en la variable xCodigo. En él. pudiendo. End) contando.Programación Como era de suponer. Repite todos los campos del registro anterior. Realizar la consulta. El trigger de teclas tiene una funcionalidad parecida a la del mandato SET KEY (o la función SetKey()) de Clipper.eidos. y está basado en la construcción de bloques (Begin . El sistema trae incorporado una importante cantidad de procedimientos y funciones que se disparan con la ocurrencia de ciertos eventos o pulsación de determinadas teclas. la programación es otro de los aspectos distintos entre Clipper y Oracle. nada más comenzar. http://www. El usuario puede redefinir esta asignación de procedimientos o puede asignar sus propios procedimientos a una tecla.. Ingresar datos para una consulta.*/ BEGIN /* Bloque para el control del ingreso correcto del código */ SELECT nombre INTO :xnombre FROM artículos WHERE código=:xcodigo . el evento de insertar un registro dispara un procedimiento con determinados controles.. message('Código Correcto'). El lenguaje procedural de Oracle para SQL es el PL/SQL. lo que implica un ahorro importante de tiempo de programación. . La programación en Oracle se hace a través del diseño de pantallas (forms). de ser válido. Ir al menú. el sistema ya tiene incorporadas las tareas más rutinarias y que siempre se suelen necesitar. A continuación 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.

00 $330.Detalle -Total La creación de este informe se realiza con la definición de tres consultas. http://www. relacionadas entre sí por el número del cliente: Q_CLIENTE : Identificar el cliente.eidos.nombre 7 Algoritmo. RAISE FORM_TRIGGER_FAILURE. entre los cuales incluye algunos como: Master .00 Artículo Total -------------DISKETTE $300.00 $220. La revista para el programador de sistemas de bases de datos.Detalle . Carta Modelo.50 20/03/95 15/03/95 Valor $100. Facilidad de reportes (informes) Oracle incorpora el SQL*ReportWrite que es una herramienta muy eficaz para facilitar la creación de informes.50 $200. Q_TOTAL : Sumar los valores de ventas agrupados por el número del cliente y artículo. END.00 PAPEL $330.50 $220. También incluye la posibilidad de realizar una visualización previa por pantalla.es . Q_VENTAS : Listar para cada cliente y cada artículo su fecha y valor de venta. Matriz. Para dar una idea de las posibilidades de esta herramienta veamos en la tabla 4 cómo se define un informe del tipo Master .Total.© Grupo EIDOS . y distintos estilos de informes.WHEN NO_DATA_FOUND THEN message('Código Incorrecto'). Rango de valores.Detalle -Total.50 EMPRESA B DISKETTE PAPEL $300. Empresa EMPRESA A Artículo DISKETTE DISKETTE PAPEL Artículo -------DISKETTE PAPEL Fecha 01/03/95 10/03/95 21/03/95 Total ------$300.00 Tabla 4: informe del tipo Master . Etiqueta. Query Name: Q_CLIENTE select numero. Llenado de Preimpreso.

es .fecha.fecha Parent Query 1: Q_CLIENTE Child Columns: NUMERO Parent 1 Columns: NUMERO Query Name: Q_TOTAL select numero. La revista para el programador de sistemas de bases de datos.from clientes order by nombre Query Name: Q_VENTAS select numero. la cantidad de líneas y espacios.valor from ventas order by articulo. Group Name Query G_CLIENTE Q_CLIENTE G_VENTAS Q_VENTAS G_TOTAL Q_TOTAL Tabla 5: Formas de impresión Print Direction Down Down Down Group Name G_CLIENTE Relative Position Lines Before Spaces Before 2 Spacing Record 2 8 Algoritmo.© Grupo EIDOS .eidos. En la tabla 5 y 6 se ve todo lo expuesto.articulo.sum(valor) from ventas group by numero.articulo. la posición relativa (a la derecha o abajo).articulo Parent Query 1: Q_CLIENTE Child Columns: NUMERO Parent 1 Columns: NUMERO A cada consulta se le asigna un GRUPO para definir la forma de impresión (Down. la separación entre registros y otros. Across.articulo order by numero. Crosstab). http://www.

pasará a ser de las más distendidas. http://www. La revista para el programador de sistemas de bases de datos. En este artículo sólo he enumerado algunos de los aspectos más destacados de Oracle. que para mí era de las menos gratas en Clipper. Si es de interés para los lectores podríamos comenzar una serie de artículos para adentrarnos en el mundo Oracle.es .G_VENTAS 2 G_TOTAL Below 1 0 Tabla 6: Comportamientos de los registros y campos Esta forma de trabajo hace que la tarea de diseño de informes.eidos.© Grupo EIDOS . 9 Algoritmo.