Sei sulla pagina 1di 150

GESTIN DE BASES DE DATOS

PRESENTACIN
La Universidad Autnoma de Quito pone a disposicin de los estudiantes de la modalidad semipresencial esta ayuda metodolgica vlida para la formacin de profesionales en el rea informtica capacitados para el anlisis, diseo, creacin y mantenimiento de sistemas que utilicen bases de datos. El estudio y la correcta comprensin de los principios bsicos referentes a las bases de datos son de capital importancia para los profesionales de la informtica y para otros especialistas cuyo trabajo se desarrolla dentro del mbito de la sociedad de la informacin y del conocimiento. Esta ayuda permite al estudiante adquirir los conocimientos necesarios para poder realizar sistemas con bases de datos relacionales mediante la prctica numerosos ejemplos. Este mdulo pretende ser una introduccin a Forms y Report como componentes de Oracle. No se pretende realizar un estudio exhaustivo de todas las opciones, solo se ha pretendido introducir y explicar las opciones ms tiles, dejando los detalles ms especficos a los manuales de referencia. Deseo el mejor aprovechamiento de este material y el xito en esta profesin.

GESTIN DE BASES DE DATOS

OBJETIVOS DEL MDULO


1.1 GENERAL El objetivo de este curso es doble. El primer objetivo es aportar al alumno una visin genrica y bastante completa de la arquitectura que Oracle utiliza para almacenar la informacin, desde lo bsico hasta lo ms avanzado del rea. Tras ello, el segundo objetivo de este curso es permitir que el alumno entienda el desarrollo de aplicaciones utilizando Forms y Report en un entorno cliente servidor en donde todas las prcticas se realizarn sobre tecnologa Oracle. 1.2 ESPECFICOS Conocer la arquitectura de la base de datos Oracle. Aprender una herramienta de desarrollo de aplicaciones utilizando bases de datos Crear sistemas utilizando arquitectura cliente servidor bajo las herramientas de Oracle. Aprender a instalar y administrar un manejador de bases de datos.

GESTIN DE BASES DE DATOS

INTRODUCCION
Este mdulo trata sobre la utilizacin de herramientas de desarrollo de aplicaciones de Oracle como el mejor manejador de bases de datos que existen en la actualidad. Trata sobre la versin 8 de Oracle, que cualquiera podra decir que se ha quedado obsoleto, y la verdad es que no le falta razn. Sin embargo, la mayora de los captulos no tratan de temas especficos y avanzados de Oracle, sino sobre conceptos de bases de datos relacionales, la arquitectura interna o el uso de Forms y Report, y la verdad es que sobre estos tres aspectos no hay cambios muy a menudo. De todas formas, algunos detalles de lo que explico han podido quedar obsoletos, as que recomiendo que consulten con los manuales de Oracle para asegurarse sobre cmo funcionan en las versiones actuales. Es por eso que este mdulo no da los detalles ms ocultos de Oracle, ni los trucos ms avanzados para optimizar bases de datos, ni siquiera pretende ser un texto de referencia para consultar la sintaxis de las instrucciones, sino que ayudar a introducir en el mundo de Oracle, empezando desde cero, y llegando a un nivel que permitir seguir aprendiendo por si mismo. Tambin puede ser til para los que han trabajado algo con SQL en otras bases de datos, y quieren comprender la arquitectura interna de Oracle y los conceptos de base y programacin en un entorno cliente servidor con las herramientas de Oracle.

GESTIN DE BASES DE DATOS


UNIDAD I
OBJETIVO DE LA UNIDAD Conocer los conceptos bsicos de bases de datos y sus caractersticas principales Definir el concepto de un Sistema Manejador de Bases de Datos DBMS Enterarse del funcionamiento interno de un manejador de bases de datos Aprender el lenguaje de programacin PL/SQL que ampla la funcionalidad de SQL El alumno conocer algunas caractersticas de la base de datos Oracle y del producto PL/SQL y cmo se inserta en la arquitectura de desarrollo de la base de datos.

ACTIVIDADES: 1. Recopilar informacin de la normalizacin de bases de datos. 2. Obtener manuales de referencia de Oracle CRITERIOS DE EVALUACIN: Examen escrito Desarrollo de ejercicios Trabajos individuales

GESTIN DE BASES DE DATOS CAPITULO I DEFINICIONES Y CONCEPTOS BASICOS Que es una Base de Datos
Es una coleccin de archivos interrelacionados, creados y manejados con un DBMS. El contenido de una base de datos engloba a la informacin concerniente (almacenadas en archivos) de una organizacin, de tal manera que los datos estn disponibles para los usuarios. Tambin podemos decir que es una agrupacin de datos almacenados bajo las siguientes caractersticas: Integrados o Combinacin de archivos separados o Control centralizado o Poca redundancia Compartidos o Mltiples aplicaciones o Acceso solamente a personas autorizadas Concurrentemente Compartidos o Integridad de los datos o Deteccin de DEAD-LOCKS Independientes o Mtodo de acceso o Estructura de datos

Objetivos de una Base de Datos


Controlar la integridad referencial Proveer mecanismos de seguridad Evitar las inconsistencias y redundancias Facilidad de manipulacin de las bases de datos Acceso concurrente

Que es un manejador de Bases de Datos


Un DBMS es una coleccin de numerosas rutinas de software interrelacionadas, cada una de las cuales es responsable de una tarea especfica.

GESTIN DE BASES DE DATOS


SISTEMA DE BASES DE DATOS

USUARIO

Manejador de Base B.D.D


De Datos

Programa o nivel de software que sirve de interface entre el usuario y la Base de Datos fsica Nivel de Software mencionado que principalmente facilita: o Uso simultneo de la Base de Datos por mltiples usuarios o Herramientas para acceder y manipular los datos de la Base de Datos Una Estructura para ORGANIZAR datos normalizados.

Normalizacin
La normalizacin es el proceso mediante el cual se transforman datos complejos a un conjunto de estructuras de datos ms pequeas, que adems de ser ms simples y ms estables, son ms fciles de mantener. Tambin se puede entender la normalizacin como una serie de reglas que sirven para ayudar a los diseadores de bases de datos a desarrollar un esquema que minimice los problemas de lgica. Cada regla est basada en la que le antecede. La normalizacin se lleva a cabo por cuatro razones: 1. Estructurar los datos de forma que se puedan representar sus relaciones pertinentes. 2. Permitir la recuperacin sencilla de los datos en respuesta a las solicitudes de consultas y reportes. 3. Simplificar el mantenimiento de datos (altas, bajas, modificaciones, consultas) 4. Reducir la necesidad de estructurar los datos cuando surjan nuevas aplicaciones.

El modelo lgico
Un primer paso en el modelo de procesos es la construccin de un modelo lgico de datos usados en el negocio. El modelo lgico es un diagrama normalizado de datos. Ej Tabla Worker Name Age Lodging Manager Ardes Skill1

GESTIN DE BASES DE DATOS


Skill2 Skill3 Ability

Primera forma normal


Es poner los datos en tablas separadas de manera que los datos de cada tabla son de un tipo similar y dando a cada tabla una clave principal para eliminar los grupos repetidos de datos. Tabla Worker Name Age House Manager Ardes Tabla Skill Name Skill Description Ability

Clave Principal

Segunda forma normal


Sacar los datos que solo dependen de una parte de la clave. Tabla Worker Tabla Skill-Worker Name Name Age Skill Lodging Ability Manager Address Tabla Skill Skill Description

Tercera forma normal


Deshacerse de cualquier cosa de las tablas que dependan de la clave principal pero a travs de otro campo. Tabla Worker Tabla Skill-Worker Tabla Skill Tabla Lodging Name Name Skill Lodging Age Skill Description LongName Lodging Ability Manager Address Con esta informacin podemos elaborar el siguiente modelo entidad-relacin.

GESTIN DE BASES DE DATOS

EJERCICIO: Realice el script respectivo para la creacin fsica de la bases de datos del modelo E-R anterior utilizando comandos SQL.

GESTIN DE BASES DE DATOS CAPITULO II


QUE ES ORACLE
ORACLE es un manejador de bases de datos Relacional que soporta la tarea de introducirguardar-recuperar informacin y proporciona hbiles herramientas que permiten considerables y sofisticadas maneras en que se capturan los datos, se editan, se modifican y se introducen, adems de cmo se guardan de una manera segura y cmo se pueden recuperar, manipular y emitir informes con ellos. Actualmente est disponible en cuatro versiones: STANDARD.- Se caracteriza por ser fcil de usar potente y con funcionalidad para trabajo en grupo. ENTERPRISE EDICIN (Edicin Empresarial).- Incorpora opciones de misiones critica OLTP (procesamiento de transacciones en lnea) y aplicaciones de Data Ware Housing (bodega de datos). PERSONAL EDITION.- Incluye las opciones de la versin empresarial pero solo para un usuario. LITE.- Permite la sincronizacin de bases de datos ubicadas en las PALM (Hand Held).

MODULOS DE ORACLE
Oracle esta compuesta por:

Export / Import

Host Lenguaje Interface

SQL*Plus

Oracle Kernel

Forms

Diccionario DATO S

DataLoader

Datos

Report

SQL Execution Host Lenguaje Interface

9
User Programs Pro * Oracle

GESTIN DE BASES DE DATOS


El levantar una base de datos de Oracle implica que se ejecuten ciertos procesos para su correcto funcionamiento. Cada vez que una base de datos est corriendo es asociada con una instancia de Oracle.

INSTANCIA DE ORACLE
Cuando una base de datos es arrancada en un servidor, Oracle reserva un rea de memoria llamada SGA (System Global Area) y ejecuta uno o ms procesos en back ground. En el SGA es donde se encuentra el Area de Contexto, los buffers, tablas y redo logs a travs de los cuales fluyen todas las transacciones entre las aplicaciones y el almacenamiento de datos y sirven a uno o ms usuarios de la base de datos.

Por cada instancia de base de datos, tendremos una zona de memoria global, el SGA, donde se almacenan aquellos datos y estructuras que deben se compartidos entre distintos procesos de la base de datos, como los procesos propios de Oracle y cada uno de los subprocesos que gestionan la conexin. El tamao del SGA es uno de los puntos ms crticos a la hora de mejorar el rendimiento de una base de datos, ya que, cuanto mayor memoria se reserve (mientras no sea memoria virtual), ms rpidas se realizarn ciertas operaciones. Por ejemplo, las ordenaciones (una de las operaciones que ms rpido deben hacerse) se realizan en el SGA si hay espacio suficiente. En caso contrario, se realizarn directamente en el disco, utilizando segmentos temporales. El SGA se divide en cuatro grandes zonas:

Database buffer cache: almacena los bloques que se han ledo de los datafiles. Cada vez que es necesario acceder a un bloque, se busca el bloque en esta zona, y en caso de no existir, se lee de nuevo del datafile correspondiente. Cuantos ms bloques quepan en esta zona de memoria, mejor ser el rendimiento. Area de Contexto: es la zona de memoria se almacenan compiladas las ltimas sentencias SQL (y bloques PL/SQL) ejecutadas. Adems se almacenan las variables acopladas (bind), el rbol de parsing, los buffer de ejecucin y el plan de ejecucin. Es importante que siempre que se utilice la misma sentencia, sea exactamente igual, para poder aprovechar sentencias previas almacenadas en el SQL Area. Es decir, las siguientes sentencias: SELECT * FROM TABLA select * from tabla SELECT * FROM TABLA SELECT *

10

GESTIN DE BASES DE DATOS


FROM tabla se consideran distintas y no se aprovecha el SQL Area. Debe coincidir el texto exactamente, considerando maysculas y minsculas, espacios, retornos de carro, nombre de parmetros, etc. Esto es debido a que se buscan dentro del SQL Area utilizando un hash de la sentencia, y un simple espacio (o cambiar una letra a maysculas) hace que el hash resultante sea distinto, por lo que no encontrar la sentencia dentro del SQL Area. Cuanto mayor sea el espacio del SQL Area, se realizarn menos compilaciones, planes de ejecucin y anlisis lxicos, por lo que la ejecucin de las consultas ser ms rpida.

Redo cache: almacena los registros de redo de las ltimas operaciones realizadas. Estos registros se almacenan en los archivos de redo, que sirven para recomponer la base de datos en caso de error. Dictionary cache: almacena datos del diccionario de Oracle, para utilizarlos en los planes de ejecucin, optimizacin de consultas, etc. Cuantos ms datos quepan en esta zona, mayor probabilidad habr de que el dato que necesitamos ya est en memoria, y no sea necesario acceder a las tablas del diccionario para leerlo.

ESTRUCTURA DE UNA BASE DE DATOS


Una Base de Datos Oracle est estructurada por los siguientes elementos:

1. La Instancia de memoria que contienen la SGA 2. Ejecucin de procesos en back ground (Procesos en segundo plano)
3. Archivos fsicos de la Base de Datos entre los que tenemos: Archivos de inicializacin Adems de estructuras de disco y de memoria, un servidor Oracle necesita ciertos archivos para poder ejecutarse. Estos archivos se establecen durante la creacin de la base de datos, y se consultarn cada vez que se arranque la base de datos, por lo que deben estar disponibles. Bsicamente podemos diferenciar los siguientes tipos de archivos:

a. Control files: son archivos de control que se consultan cada vez que se arranca la
base de datos. Indica datos como la localizacin de los datafiles, nombre de la base de datos.

b. Init file: es el archivo que contiene los parmetro de inicio de la base de datos
(tamao del bloque, tamao del SGA, etc.). Normalmente tiene el nombre INIT.ORA

c. Redo logs: estos archivos contienen un historial de todas las instrucciones que
han sido lanzadas a la base de datos, para poder recuperarla en caso de fallo. No se utilizan durante la inicializacin, sino durante toda la ejecucin de la base de datos.

Archivos de la Base de Datos.- Datafiles

11

GESTIN DE BASES DE DATOS

COMPONENTES DE UN SISTEMA DE BASE DE DATOS

Despus de arrancada una instancia, Oracle asocia esta instancia con la base de datos especifica. Esto se conoce con el nombre de Montar la Base de Datos. La Base de Datos luego debe ser accesible a usuarios autorizados y se conoce con el nombre de Abrir la Base de Datos. PROCESOS DE ORACLE DATABASE WRITER(dbwr) Se encarga de escribir bloques de datos modificados desde los buffers de la base de datos a los datafiles. LOG WRITER(lgwr) Escribe los buffers de los REDO LOGS al disco. SYSTEM MONITOR(smon) Ejecuta una recuperacin de la base de datos cuando una instancia falla al ser arrancada, limpiando los segmentos temporales que ya no estn en uso y restaura las transacciones al estado que estaban antes que se produzca la falla. PROCESS MONITOR(pmon) Ejecuta procesos de recuperacin cuando un proceso de usuario falla. Es responsable de limpiar el cach y libera recursos que el proceso usaba realizando un ROLLBACK de la base de datos. ARCHIVER(arch) Escribe los archivos REDO LOG a un dispositivo de archivo cuando el rea de los mismos se haya llenado. Checkpoint (CKPT) Durante perodos especficos de tiempo, los buffers de la base de datos en el SGA son escritos a los datafiles por el DBWR; este proceso es llamado checkpoint, el cual es responsable de sealar al DBWR que buffers han sido actualizados.

12

GESTIN DE BASES DE DATOS


Recoverer (RECO) Es usado para resolver transacciones distribuidas que estn pendientes en la red o cuneado el sistema falla en una base de datos distribuida automticamente realizando commit o rollback..

SEGMENTOS DE UNA BASE DE DATOS


BOOTSTRAP SEGMENT Es un segmento especial conteniendo las definiciones del diccionario de datos que son cargados cuando la base de datos es abierta permitiendo subir a la base. No se tiene control para este segmento. DATA SEGMENT Es definido como el espacio asignado a las tablas de datos. INDEX SEGMENT Incluye un espacio reservado que se utiliza en la generacin de ndices de las tablas. TEMPORARY SEGMENT Es un tipo especial de almacenamiento asociado con los usuarios de SQL durante la ejecucin de consultas. ROLLBACK SEGMENT Es el segmento donde se almacena la informacin hasta que se complete la transaccin y actualice la base de datos o se realice un rollback.

ALMACENAMIENTO DE DATOS EN ORACLE


Para almacenar datos Oracle divide lgicamente a la Base de Datos en unidades ms pequeas que se conocen con el nombre de Tablespaces. Entonces una Base de Datos est formada por una o varias unidades lgicas llamadas Tablespaces.

TABLESPACE
Un tablespace no es un fichero fsico en el disco, simplemente es el nombre que tiene un conjunto de propiedades de almacenamiento que se aplican a los objetos (tablas, ndices, permisos, secuencias) que se van a crear en la base de datos bajo el tablespace indicado. Un objeto en base de datos debe estar almacenado obligatoriamente dentro de un tablespace. Las propiedades que se asocian a un tablespace son: Localizacin de los ficheros de datos. Especificacin de mximas cuotas de consumo de disco. Control de la disponibilidad de los datos (en lnea o fuera de lnea). Backup de datos.

Cuando un objeto se crea dentro de un cierto tablespace, este objeto adquiere todas las propiedades antes descritas del tablespace utilizado.

13

GESTIN DE BASES DE DATOS


En este esquema podemos ver que, por ejemplo, la tabla ARTICULO se almacena dentro del tablespace A, y que por lo tanto tendr todas las propiedades del tablespace A que pueden ser: Sus ficheros de datos estn en $ORACLE_HOME/datos/datos_tablespace_A Los objetos no pueden ocupar ms de 10Mb de espacio de base de datos. En cualquier momento se puede poner fuera de lnea todos los objeto de un cierto tablespace. Se pueden hacer copias de seguridad slo de ciertos tablespaces.

Si nos fijamos, se puede apreciar que es posible tener una tabla en un tablespace, y los ndices de esa tabla en otro. Esto es debido a que los ndices no son ms que objetos independientes dentro de la base de datos, como lo son las tablas. Y al ser objetos independientes, pueden ir en tablespaces independientes. En el esquema tambin vemos que hay un tablespace Temporal (en gris oscuro). Este representa las propiedades que tendrn los objetos que la base de datos cree temporalmente para sus clculos internos (normalmente para ordenaciones y agrupaciones). Su creacin difiere en una de sus clusulas de creacin. El tablespace RO (en gris claro) difiere de los dems en que es de solo lectura (Read Only), y que por lo tanto todos los objetos en l contenidos pueden recibir rdenes de consulta de datos, pero no de modificacin de datos. Estos pueden residir en soportes de slo lectura, como pueden ser CDROMs, DVDs, etc. Cuando se crea un tablespace, ste se crea de lectura/escritura. Despus se puede modificar para que sea de solo lectura.

El Tablespace System
Cuando se crea una base de datos es obligatorio crear un tablespace inicial en el que se van a crear los usuarios SYS y SYSTEM automticamente. Estos usuarios son los que tienen la informacin necesaria para que funcione nuestra base de datos y podamos hacer todo tipo de operaciones como, por ejemplo, crear nuevos usuarios o crear nuevos tablespaces y tablas en esos nuevos tablespaces. Este tablespace inicial se llama por defecto SYSTEM. Es una pieza clave para un buen funcionamiento de la base de datos ya que en l residen todos los objetos de los usuarios SYS y SYSTEM. En l se almacenan todos los datos de sistema, el catlogo y todo el cdigo fuente y compilado de procedimientos PL/SQL. Es muy recomendable crear al menos otro tablespace nuevo distinto al SYSTEM. As, todos los nuevos usuarios que creemos en nuestra base de datos, junto con todas sus tablas e ndices se almacenarn en un tablespace diferente a SYSTEM. Se realiza esta separacin para evitar que se bloquee toda la base de datos si ocurre algo grave en el tablespace SYSTEM. Suele ser habitual que para nuestras aplicaciones creemos usuarios y tablas en las que introducimos informacin y que sin darnos cuenta se llene de informacin el tablespace en el que estn estas tablas. Si no hemos sido previsores, podemos haber llenado el tablespace SYSTEM con lo que es posible que se paralice toda la base de datos. Un tablespace puede estar en lnea o fuera de ella (Online o OffLine), esto es que todos los objetos contenidos en l estn a disposicin de los usuarios o estn inhabilitados para restringir su uso.

14

GESTIN DE BASES DE DATOS


Cualquier objeto almacenado dentro de un tablespace no podr ser accedido si este est fuera de lnea.

Manipulando Tablespaces
Ahora que nos hemos hecho una idea acerca de qu es un tablespace, vamos a realizar sobre l las manipulaciones bsicas. Partimos de una base de datos creada y levantada. Nos conectaremos a la misma con el usuario SYSTEM y su contrasea. La contrasea del usuario SYSTEM al crear la base de datos es, por defecto, MANAGER. Como medida de seguridad se recomienda cambiarla cuanto antes. Por lo tanto nos conectaremos bien al SqlPlus mediante sqlplus system/manager, o bien al server manager mediante el comando svrmgrl system/manager. Crear un Tablespace. En primer lugar vamos a crear un tablespace llamado Prueba. Esto lo podemos hacer por ejemplo desde el SQLPLUS conectados como system. Create tablespace prueba datafile '/users/oradata/orcl/prueba01.dbf' size 100M; Con esta sentencia estamos creando en nuestra base de datos un tablespace nuevo llamado "prueba" y que est formado fsicamente por un fichero (datafile) llamado prueba01.dbf de 100 Mbytes y que est en el directorio "/users/oradata/orcl". Esta sentencia crea fsicamente dicho fichero. Aumentar de tamao un Tablespace. Para aumentar el tamao de un tablespace que se nos ha quedado ya pequeo, tenemos varias posibilidades. La primera de ellas es crear un nuevo datafile y asignrselo al tablespace que queremos aumentar. Esto lo podemos hacer con la instruccin siguiente. Alter tablespace prueba add datafile '/users/oradata/orcl/prueba02.dbf' size 50M; Con esta sentencia hemos creado un nuevo fichero fsico en nuestro directorio /users/oradata/orcl de 50 Mbytes de tamao y se lo hemos asignado al tablespace "prueba". Otra posibilidad es ampliar el tamao de uno de los ficheros fsicos o datafiles que forman el tablespace. Esto lo podemos hacer fcilmente con la siguiente instruccin: Alter datafile '/users/oradata/orcl/prueba01.dbf' resize 150M; Con esta sentencia lo que hacemos es aumentar el datafile que forma parte de nuestro tablespace en 50 Mbytes. Tanto en la instruccin de crecin como en la de aumentar el tamao de un tablespace se puede observar fcilmente cmo un datafile pertenece solamente a un tablespace ya que en la propia sentencia se crea el fichero fsico o datafile.

15

GESTIN DE BASES DE DATOS


Borrando un tablespace. Para eliminar un tablespace de la base de datos se debe utilizar la sentencia: Drop tablespace prueba;

Tablespaces Online y Offline


Un tablespace puede estar en dos estados: Online y Offline. Que un tablespace est online significa que est disponible para operar en l, mientras que si est offline quiere decir que no se puede utilizar. Cuando creamos un tablespace, se crea en estado online y, por lo tanto, podemos crear en dicho tablespace objetos como ndices, tablas, etc. Cmo sabemos en qu estado se encuentran nuestros tablespaces?. Existe una vista que nos da informacin sobre los tablespaces de nuestra base de datos. Esta vista es la dba_tablespaces. Consultndola podemos conocer qu tablespaces tenemos en nuestra base de datos y en qu estado se encuentran. select tablespace_name, status from dba_tablespaces; Para qu queremos poner un tablespace offline?. Hay que tener en cuenta que cuando un tablespace est offline, no se puede acceder a ningn objeto que se encuentre en l, es decir, que si en el tablespace hay tablas, no se podr hacer consultas ni inserciones ni modificaciones de estas tablas, sin embargo, el resto de los objetos que se encuentran en otros tablespaces de la base de datos si estn accesibles. Por lo tanto, pondremos un tablespace offline en general para realizar tareas administrativas. Para poder hacer una copia de seguridad del tablespace estando completamente seguros de que nadie est modificando los objetos del tablespace y que no quedan transacciones pendientes sin terminar y que pueden modificar estos objetos. Para poder actualizar una aplicacin que se basa en los objetos de este tablespace sin que ningn usuario pueda modificar los datos en medio de la actualizacin.

En un tablespace puede haber objetos de varios tipos, como hemos indicado. Si en un tablespace existen segmentos de rollback activos, no se puede poner offline, primero hay que desactivar los segmentos de rollback activos del tablespace. Cmo sabemos los rollback segments que existen en un tablespace y su estado?. Muy sencillo, con la siguiente sentencia: select rollback_segment, status, tablespace_name from dba_rollback_segs; As podremos ver todos los rollback que tenemos, en qu estado se encuentran (online, offline) y en qu tablespace estn. Si comprobamos que en el tablespace que vamos a poner offline tenemos algn segmento de rollback online (activo), debemos ponerlo offline antes que el tablespace. Para desactivar un segmento de rollback, ejecutaremos la siguiente sentencia desde el SqlPlus o desde el server manager. alter rollback segment nombre_de_segmento offline;

16

GESTIN DE BASES DE DATOS


Cuando ya no queden segmentos de rollback en estado online en nuestro tablespace, ya podremos desactivarlo para que no se pueda acceder a l. alter tablespace nombre_de_tablespace offline; Finalmente, cuando terminemos nuestras tareas administrativas sobre dicho tablespace, ya podemos activarlo para que todos sus objetos vuelvan a estar accesibles por los usuarios. alter tablespace nombre_de_tablespace online; Por supuesto, no debemos olvidar que si hemos tenido que desactivar algn segmento de rollback que se encontraba en nuestro tablespace, ahora deberemos volver a activarlo. alter rollback segment nombre_de_segmento online; Una curiosidad sobre los tablespaces que no estn disponibles (offline), es que, como ya hemos comentado, no se pueden realizar consultas ni modificaciones ni inserciones en los datos de las tablas que estn en ellos, pero si que se pueden eliminar objetos de dicho tablespace, que no es lo mismo que borrar datos de objetos del tablespace. Tambin es muy habitual que en el diseo de las bases de datos, se creen tablespaces para almacenar los ndices de la aplicacin y otros distintos para almacenar las tablas o datos. En estos casos, si desactivamos el tablespace en el que se encuentran los ndices, podemos seguir accediendo a las tablas y realizar consultas sobre ellas porque su tablespace est accesible. Por otro lado, es posible que si en servidor Oracle se encuentra con graves problemas para escribir en un tablespace, al cabo de varios intentos lo ponga automticamente offline. Queremos apuntar aqu, aunque se escapa a los objetivos de este manual, que cuando un tablespace est offline, la informacin de que esto ha ocurrido se queda almacenadada en el tablespace SYSTEM de esta base de datos. Existe una forma de transportar un tablespace de una base de datos a otra para tener accesibles sus objetos en la segunda, pero si el tablespace est offline en la primera, nunca podr ponerse online en la base de datos destino ya que, como hemos dicho, la informacin del estado de este tablespace se encuentra en el tablespace SYSTEM de la base de datos originaria del tablespace.

Tablespaces Read Only


Cuando creamos un tablespace, podemos crear en l todos los objetos que queramos y acceder a ellos y eliminarlos y tambin consultar los datos de las tablas que se encuentren en este tablespace, as como borrar, insertar y modificar estos datos. Existe la posibilidad de poner un tablespace en un estado en el cual, solamente se pueden consultar los datos de los objetos, no se puede ni borrar ni insertar nada en ellos. La principal ventaja de un tablespace read only es que, como no se pueden modificar los datos que en l se encuentran, no hace falta hacer backup del mismo. Dependiendo de las apliaciones que tengamos en nuestra base de datos nos puede interesar tener tablespaces read only o no. Por ejemplo, si tenemos una aplicacin en la que se pueden consultar cientos de fotos de animales salvajes o de paisajes, podramos crear un tablespace en el que introducir estas imgenes y luego ponerlo read only.

17

GESTIN DE BASES DE DATOS


Generalmente un tablespace de estas caractersticas, que sirve de almacenamiento de fotos o temas similares, suele ocupar mucho espacio, por lo que hacer un backup del mismo todos los das puede resultar muy costoso en tiempo y espacio. Adems, si no se modifican nunca estas fotos no tiene mucho sentido hacer copia de seguridad del mismo, y no solo eso, podramos incluso almacenar dicho tablespace en un CDROM en vez de ocupar espacio en disco. Para poner un tablespace en estado read only, simplemente debemos ejecutar la siguiente instruccin: alter tablespace nombre_de_tablespace read only; Como hemos indicado, en un tablespace read only solo se pueden realizar consultas de los datos, por lo tanto, si en el instante de ejecutar esta sentencia se estn realizando modificaciones o inserciones o borrado de datos, el servidor espera hasta que acaben para poner el tablespace en estado read only. Para ver si ha quedado en estado read only, simplemente ejecutamos la misma select que al principio para ver la informacin general de los tablespaces: select tablespace_name, status from dba_tablespaces; Si por algn motivo necesitamos modificar los datos que se encuentran almacenados en espace un tablespace read only, simplemente deberemos ponerlo en primer lugar en estado read write y una vez realizada la modificacin, volver a ponerlo en su estado read only. La sentencia que debemos ejecutar ser: alter tablespace nombre_de_tablespace read write; Tenemos un concepto que debe quedar claro. Un tablespace read only no necesita backup, y por tanto, recovery, pero, esto no hay que tomarlo al pie de la letra. Siempre hay que hacer al menos un backup. En primer lugar creamos un tablespace vaco en el que iremos metiendo poco a poco toda la informacin que nos interesa que, como en el caso que hemos supuesto anteriormente, pueden ser varias tablas que almacenan fotos de animales y paisajes. Cuando ya no vamos a crear nuevas imgenes es cuando ponemos el tablespace read only, pero ah si debemos hacer una copia de seguridad, backup, y como ya no vamos a tocar nunca ms este tablespace ser la nica. Si por algn motivo decidimos poner este tablespace otra vez read write para crear o borrar datos, despus de volver a ponerlo read only deberemos hacer un backup de los nuevos datos. Tambin hay que diferenciar dos ideas. Por un lado hemos dicho que en un tablespace read only no se pueden modificar, ni insertar ni borrar datos de sus tablas. Sin embargo y, al igual que en los tablespaces offline, si se pueden borrar objetos enteros del tablespace, como por ejemplo un ndice o una tabla.

Tablespaces Temporales
Un tablespace temporal es aqul en el que solamente puede haber objetos temporales. No se pueden crear en l objetos permanentes como pueden ser los ndices, las tablas o los segmentos de rollback. Estn especialmente preparados para optimizar las operaciones en las que se lleven a cabo ordenaciones. Por lo tanto est muy recomendado tener al menos un tablespace temporal en cada base de datos. Algunas de las operaciones que implican realizar ordenaciones son, las selects que tienen group by, las que tienen order by, la creacin de ndices y analizar ndices para calcularles las estadsticas. En todos estos casos, cuando para realizar la ordenacin el servidor no encuentra espacio suficente libre en la memoria, utiliza el tablespace temporal. Los rendimientos son muy superiores comparndolos con los tiempos que se empleara en realizar las ordenaciones

18

GESTIN DE BASES DE DATOS


en tablespaces normales. Esto se debe a que el mecanismo que se utiliza para reservar y desreservar el espacio en los tablespaces temporales es muy distinto que en los normales ya que est orientado a objetos que crecen mucho y rpido y que a continuacin disminuyen totalmente su tamao y desaparecen. Para crear un tablespace temporal simplemente hay que aadir la palabra TEMPORARY a la instruccin utilizada para crear tablespaces normales. Siguiendo el ejemplo indicado en la creacin de tablespaces, podramos tener lo siguiente: Create tablespace prueba datafile '/users/oradata/orcl/prueba01.dbf' size 100M temporary; Para indicar a un usuario de base de datos que sus ordenaciones debe hacerlas en un determinado tablespace temporal, hay que lanzar una sentencia como la que sigue. Alter user nombre_de_usuario temporary tablespace nombre_de_tablespace; Y para conocer qu usuarios existen en nuestra base de datos y cual es el tablespace temporal que utilizan, podemos consultar la base de datos de la siguiente manera: Select username, temporary_tablespace from dba_users; Y finalmente, si queremos conocer qu tablespaces tenemos y cules son temporales y cuales son permanentes, podemos consultar la vista que nos da la informacin sobre los tablespaces, es decir, la vista dba_tablespaces; Select tablespace_name, contents from dba_tablespaces; Como nota final apuntaremos que un tablespace permanente puede pasar a temporal y que uno temporal puede pasar a permanente. Adems cada uno de estos Tablespaces estn formados por uno o varios archivos fsicos llamados Datafiles.

19

GESTIN DE BASES DE DATOS


Temas Relacionados para CONSULTAR
Relacionado directamente con este tema, se pueden estudiar tambin los siguientes temas: Parametrizacin de los tablespaces. Qu es la clusula storage? qu son initial_extent, next_extent, pct_increase?. Cmo conseguimos que un usuario pueda crear tablas o ndices en un tablespace?. Qu es la fragmentacin de los tablespaces y cmo se soluciona?. Qu son los tablespaces transportables?. Qu son los tablespaces locales?. Qu es la normativa O.F.A. de Oracle y cmo se aplica a los tablespaces?.

DATAFILE (FICHERO DE DATOS)


Un datafile es la representacin fsica de un tablespace. Son los "ficheros de datos" donde se almacena la informacin fsicamente. Un datafile puede tener cualquier nombre y extensin (siempre dentro de las limitaciones del sistema operativo), y puede estar localizado en cualquier directorio del disco duro, aunque su localizacin tpica suele ser $ORACLE_HOME/Database. Un datafile tiene un tamao predefinido en su creacin (por ejemplo 100Mb) y este puede ser alterado en cualquier momento. Cuando creemos un datafile, este ocupar tanto espacio en disco como hayamos indicado en su creacin, aunque internamente est vaco. Oracle hace esto para reservar espacio continuo en disco y evitar as la fragmentacin. Conforme se vayan creando objetos en ese tablespace, se ir ocupando el espacio que cre inicialmente. Un datafile est asociado a un solo tablespace y, a su vez, un tablespace est asociado a uno o varios datafiles. Es decir, la relacin lgica entre tablespaces y datafiles es de 1-N.

En el esquema podemos ver como el Tablespace A est compuesto (fsicamente) por tres datafiles (DATOS_1.ORA, DATOS_2.ORA y DATOS_3.ORA). Estos tres datafiles son los ficheros fsicos que soportan los objetos contenidos dentro del tablespace A. Aunque siempre se dice que los objetos estn dentro del tablespace, en realidad las tablas estn dentro del datafile, pero tienen las propiedades asociadas al tablespace.

20

GESTIN DE BASES DE DATOS


Cada uno de los datafiles utilizados est ocupando su tamao en disco (50 Mb los dos primeros y 25 Mb el ltimo) aunque en realidad slo contengan dos objetos y estos objetos no llenen el espacio que est asignado para los datafiles. Los datafiles tienen una propiedad llamada AUTOEXTEND, que se si est activa, se encarga de que el datafile crezca automticamente (segn un tamao indicado) cada vez que se necesite espacio y no exista. Al igual que los tablespaces, los datafiles tambin pueden estar en lnea o fuera de ella. Cuando se van creando objetos en un tablespace, stos fsicamente se van almacenando en los datafiles asignados a dicho tablespace, es decir, cuando creamos una tabla y vamos insertando datos en ella, estos datos realmente se reparten por los ficheros fsicos o datafiles que forman parte del tablespace. No se puede controlar en qu fichero fsico se almacenan los datos de un tablespace. Si un tablespace est formado por 2 datafiles y tenemos una tabla en ese tablespace, a medida que vamos insertando filas stas se almacenarn en cualquiera de los dos datafiles indistintamente, es decir, unas pueden estar en un datafile y otras en otro. El espacio total disponible en un tablespace es lgicamente la suma de los tamaos que ocupan los ficheros fsicos o datafiles que lo forman. Como hemos indicado estos datafiles, al crearlos, estn totalmente vacos, simplemente es un espacio reservado y formateado por Oracle para su uso. A medida que se van creando objetos en ellos como tablas, ndices, etc y se van insertando registros en estas tablas, los datafiles se van llenando o, lo que es lo mismo, el tablespace se va llenando.

Creacin y Manipulacin
La creacin de datafiles est estrechamente relacionada con el tablespace al que va a pertenecer. Tenemos varias formas de crear datafiles. Cada vez que se crea un tablespace nuevo, hay que indicar obligatoriamente cual es el datafile que va a pertenecer a dicho tablespace y, en ese momento, se crea tanto el tablespace como su datafile. Tambin se pueden aadir datafiles nuevos a un tablespace que ya existe. Esto se suele hacer cuando un tablespace se est llenando y est a punto de llegar a su capacidad mxima. Al aadir un datafile a un tablespace, se aumenta el espacio disponible en dicho tablespace en tantos megabytes como tenga el datafile nuevo recin creado. Creacin de un nuevo datafile de 50 megabytes junto con un nuevo tablespace: Create tablespace nombre_tablespace datafile '/users/oracle/orcl/nombre_datafile.dbf' size 50M; Una vez creado este tablespace, si con el tiempo queremos aadirle espacio, lo podemos hacer creando un nuevo datafile y asignndoselo al tablespace: Alter tablespace nombre_tablespace add datafile '/users/oracle/orcl/nombre_datafile2.dbf' size 100M; Con estas dos instrucciones hemos creado un tablespace nuevo en nuestra base de datos en el que caben 150 megabytes de informacin. Este espacio est formado fsicamente por dos ficheros llamados nombre_datafile.dbf y nombre_datafile2.dbf que se encuentran en el directorio /users/oracle/orcl de nuestra mquina y que ocupan 50 y 100 Mbytes respectivamente.

21

GESTIN DE BASES DE DATOS


Para conocer los datafiles que forman parte de nuestra base de datos, podemos consultar la vista dba_data_files en la que se nos indica por cada datafile o fichero de datos, a qu tablespace pertenece y cuanto espacio total tiene reservado. Es importante recalcar que el espacio que aparece en esta vista es el espacio total que ocupa el fichero fsico y no el espacio utilizado de ese fichero, es decir, que si creamos un datafile de 50Mbytes y acto seguido consultamos esta vista, veremos que ocupa 50Mbytes a pesar de estar totalmente vaco. Este dato indica la cantidad de espacio que ocupa el fichero fsico, la cantidad de informacin que podremos introducir en l. select tablespace_name, file_name, bytes /1024/1024 from dba_data_files; Tenemos tambin la posibilidad de aumentar el tamao de un datafile, es decir, podemos conseguir que un tablespace tenga ms sitio vaco aumentando uno o varios de los ficheros fsicos que lo forman, en lugar de aadindole un nuevo fichero fsico. Para aumentar el tamao de un datafile, podremos utilizar la siguiente instruccin: alter database datafile '/users/oracle/orcl/nombre_datafile.dbf' resize 100M; Esta instruccin deja el datafile indicado con un tamao de 100M, no es que se aumente en 100Mbytes. Esto es fcil de recordar, vale con pensar en que esta instruccin se utiliza tambin para disminuir el tamao de un datafile que en un primer lugar lo creamos excesivamente grande. En esta instruccin no se pueden utilizar nmeros negativos, por lo que parece claro que si ponemos un nmero queremos indicar que ser el tamao que queremos que tenga nuestro datafile. Es importante tener en cuenta que no siempre podemos disminuir el tamao de un datafile. Los motivos sern explicados en temas ms avanzados y tienen que ver con la forma que tiene Oracle de reservar el espacio dentro de los tablespaces y datafiles. Existe una posibilidad de que Oracle aumente automticamente el tamao de sus datafiles cuando stos se estn llenando, para evitar as la intervencin manual del administrador de la base de datos. Se puede hacer de varias formas, al crear el tablespace con el datafile, al aadir un nuevo datafile al tablespace o incluso en cualquier otro momento. Para indicar que queremos que un datafile aumente automticamente cuando aadimos un nuevo datafile a un tablespace existente podemos utilizar: alter tablespace nombre_tablespace add datafile nombre_datafile size 100M autoextend on next 250K maxsize 200M; Con esta instruccin lo que estamos haciendo es aadir un nuevo datafile llamado nombre_datafile a nuestro tablespace nombre_tablespace con 100Mbytes de tamao. Adems, estamos indicando que queremos que aumente por si mismo cada vez que se llene y que aumente en bloques de 250 Kbytes cada vez. Finalmente le ponemos un tope al tamao total que queremos que tenga nuestro datafile con la instruccin maxsize, por lo que una vez que llegue a 200 Mbytes, si se llena, no volver a crecer ms. Para indicar en cualquier momento que queremos que un datafile no crezca ms automticamente, podemos utilizar: alter database datafile nombre_datafile autoextend off; Y para indicar en cualquier momento que un determinado datafile crezca automticamente, la instruccin que ejecutaremos ser:

22

GESTIN DE BASES DE DATOS


alter database datafile nombre_datafile autoextend on next 1 M maxize 300 M; Nota: en esta sentencia, se puede indicar que queremos que crezca indefinidamente, sin tome mximo. Esto lo conseguimos con "maxsize unlimited", pero es muy peligroso porque por algn problema descontrolado, nos puede crecer tanto que nos quedemos si disco en la mquina y luego es muy complicado restaurar un tamao normal.

Renombrando Datafiles
Existe la posiblidad de cambiarle el nombre a un datafile o de cambiarlo de directorio. Esta operacin no consiste simplemente en ir al sistema operativo y cambiarle el nombre, ya que si hiciramos eso, Oracle no se da cuenta de que hemos movido de sitio un datafile y cuando intenta acceder a informacin de ese datafile muestra mensajes de error indicando que no lo encuentra. Hay que distinguir entre los datafiles del tablespace SYSTEM y el resto. Los datafiles del tablespace SYSTEM son especiales y no se pueden mover con la misma facilidad que los dems. Renombrando datafiles que no son del tablespace SYSTEM En primer lugar, hay que comprobar cual es nombre y el path completo del fichero a mover y el estado en que se encuentra dicho fichero. Para realizar esta comprobacin podemos consultar la vista dba_data_files. select file_name, status, bytes from dba_data_files; En file_name se nos indica cual es el nombre del datafile que nos interesa, con todo su path, y adems vemos cuanto ocupa. El campo status podremos comprobar si el datafile est disponible (available). Nota: No se debe mover el datafile fsico sin antes poner el tablespace offline. Hay que sealar que file_name es el nombre que Oracle cree en ese mismo instante que tiene su datafile. Si vamos al sistema operativo y movemos el datafile de sitio, Oracle no es consciente de lo que hemos hecho por lo que si volvemos ha realizar esta select nos seguir dando los mismos valores. Hay que conseguir decirle a Oracle que realmente hemos movido o renombrado el fichero. Ahora que sabemos cual es el path y nombre completo de nuestro datafile, tenemos que evitar que se realicen operaciones que modifiquen los datos de los objetos de nuestro tablespace, para que as consigamos tener el contenido del datafile esttico. Esto se consigue poniendo el tablespace en estado read only, como se explic en el tema de los tablespaces. alter tablespace nombre_tablespace read only; Para comprobar que realmente est nuestro tablespace en estado read only, podemos consultar la vista dba_tablespaces. En estos momentos, los usuarios de la base de datos, pueden acceder y modificar la informacin de cualquier tablespace que no sea el que estamos manipulando, en el cual, solamente podrn realizar operaciones de lectura, nunca inserciones ni modificaciones ni borrados de datos. Es en este instante, cuando sabemos que no se est modificando el contenido de nuestro tablespace y, por lo tanto, de nuestro datafile, cuando debemos ir al sistema operativo y hacer una

23

GESTIN DE BASES DE DATOS


copia de nuestro datafile con el nuevo nombre y la nueva ubicacin. Una vez copiado, comprobamos tambin desde el sistema operativo que el nuevo datafile ocupa el mismo espacio que el antiguo, para estar seguros de que no ha habido ningn problema en la copia. Hasta ahora, no le hemos indicado a Oracle que hemos movido de ubicacin o de nombre a uno de sus datafiles, para poder indicrselo, debemos asegurarnos que no hay ningn usuario utilizando el tablespace, ni siquiera en modo consulta. Por lo tanto, debemos deshabilitar el tablespace. alter tablespace nombre_tablespace offline; Y una vez deshabilitado, indicamos a Oracle el cambio de nombre o de ubicacin: alter database rename file 'viejo_datafile_con_path' to 'nuevo_datafile_con_path'; En estos momentos Oracle ya sabe que cuando tenga que buscar la informacin de ese datafile debe buscarlo en el nuevo path indicado y con el nuevo nombre. Por lo tanto, si lanzamos la select para ver los datafiles de la base de datos, es decir, la select de la vista dba_data_files, comprobaremos que ha cambiado la informacin antigua por la nueva. Ahora solamente nos queda activar el tablespace y permitir operaciones de lectura y escritura en l. alter tablespace nombre_tablespace online; alter tablespace nombre_tablespace read write; Por supuesto, antes de realizar cualquier operacin que implique modificacin de las estructuras de la base de datos, como el renombrado de un datafile, se debe hacer un backup completo de la misma. Una vez realizada la operacin tambin se recomienda hacer un nuevo backup. Nota: hay que resaltar una vez ms, que no se debe mover el datafile desde el sistema operativo sin haber puesto con anterioridad su tablespace offline. De no ser as, si alguien manipula datos durante el tiempo que tarda en hacerse la copia en el sistema operativo, Oracle detecta problemas e invalida el datafile, lo que va a provocar que haya que poner en prctica alguna estrategia de backup para recuperar el datafile invalidado. Renombrando datafiles del tablespace SYSTEM El tablespace SYSTEM es especial, por lo tanto, para manipular sus datafiles, hay que hacerlo tambin de manera especial. Nadie puede trabajar con la base de datos. Por ese motivo, se debe apagar la base de datos y levantarla pero sin abrirla. Los conceptos de apagar la base de datos y levantarla no son objeto de este manual por lo que simplemente se indicarn las instrucciones. Primeramente se debe apagar o, ms coloquialmente, tirar abajo la base de datos. Esto lo hacemos desde el Server Manager, no desde SqlPlus. Nos conectamos al Server Manager como el usuario administrador y con privilegios especiales: svrmgrl connect internal shutdown; Despus de esperar a que se terminen las transacciones activas, las base de datos se apaga y podemos volver a levantarla, tambin desde el Sever Manager, pero sin abrirla, solamente montndola.

24

GESTIN DE BASES DE DATOS


startup mount; Con esta instruccin hemos levantado la base de datos pero no la hemos abierto, por lo que nadie, excepto otro administrador, puede estar manipulando sus objetos. Ahora podemos realizar la copia de los datafiles del tablespace SYSTEM al nuevo directorio o con el nuevo nombre. Comprobamos que tanto el fichero nuevo como el antiguo tengan el mismo tamao y a continuacin indicamos a Oracle que hemos movido el datafile de la misma manera que en el apartado anterior: alter database rename file 'viejo_datafile_con_path' to 'nuevo_datafile_con_path'; Finalmente podemos levantar la base de datos para que pueda volver a ser utilizada por todos los usuarios: alter database open; Nota: Despus de comprobar que la base de datos se levanta correctamente, se pueden borrar los ficheros fsicos o datafiles viejos de su ubicacin antigua ya que Oracle est utilizando solamente los nuevos.

Temas Relacionados para CONSULTAR


Relacionado directamente con este tema, se pueden estudiar tambin los siguientes temas: Es mejor crear pocos datafiles grandes o muchos pequeos?. Cuntos datafiles creamos para nuestra base de datos?. Se deben crear los datafiles en cualquier disco de nuestra mquina?. Los links de sistema operativo, qu son y cmo nos ayudan a la hora de mover datafiles de ubicacin?. Interesa crear datafiles con autoextent? y con maxsize unlimited?. Cmo conocer el espacio libre que tenemos en el datafile?. Qu es la fragmentacin de los datafiles y tablespaces? Cmo evitarla?. Cmo se puede verificar la escritura de los datafiles?. Cmo se aplica la normativa O.F.A. de Oracle a los datafiles?.

Oracle almacena la informacin en unidades lgicas que son los segmentos, las extensiones y los bloques. Estas tres unidades estn relacionadas entre s. Un segmento est formado por una o varias extensiones y cada extensin est formado por varios bloques.

SEGMENTOS
Un segmento almacena la informacin de una estructura lgica de Oracle dentro de un Tablespace. Est formado por una o ms extensiones y, a medida que va creciendo el segmento se van asignando nuevas extensiones al mismo. Hay cuatro tipos de segmentos: de datos, de ndices, temporales y de rollback. Se puede decir que, segmento es a un objeto base de datos, lo que datafile a un tablespace: un de un el

25

GESTIN DE BASES DE DATOS


segmento es la representacin fsica del objeto en base de datos (el objeto no es ms que una definicin lgica). Podemos ver cmo el espacio que realmente se ocupa dentro del datafile es el segmento y que cada segmento pertenece a un objeto.

EXTENSIONES
Una extensin es una unidad lgica de almacenamiento que est formada por un nmero determinado de bloques de datos contiguos. La agrupacin de una o varias extensiones forman un segmento que puede ser una tabla, un ndice, un segmento de rollback o un segmento temporal. Por lo tanto, datos de una tabla, sabemos que estn en un solo segmento de tipo tabla, que a su vez estar formado por una o varias extensiones y que, cada una de esas extensiones est formada por un nmero determinado de bloques de datos. Cuando se crea un segmento nuevo, es decir, una tabla, un ndice o un segmento de rollback, se crea obligatoriamente una extensin en dicho segmento (en el caso de los rollback se crean dos). El tamao de esta extensin inicial viene dado por el valor parmetro "initial" que se indica en el momento de crear el segmento.

En el esquema vemos como el objeto (tabla) FACTURA tiene un segmento en el datafile A-1, y este segmento est compuesto de 3 extensiones. Una de estas extensiones tiene un color distinto. Esto es porque existen dos tipos de extensiones:

INITIAL (extensiones iniciales): estas son las extensiones que se reservan durante la creacin del objeto. Una vez que un objeto est creado, no se puede modificar su extensin inicial. NEXT (siguientes o subsiguientes extensiones): toda extensin reservada despus de la creacin del objeto. Si el INITIAL EXTENT de una tabla est llena y se est intentando insertar ms filas, se intentar crear un NEXT EXTENT (siempre y cuando el datafile tenga espacio libre y tengamos cuota de ocupacin suficiente).

Sabiendo que las extensiones se crean en momentos distintos de tiempo, es lgico pensar que unas extensiones pueden estar fragmentadas de otras. Un objeto de base de datos no reside todo junto dentro del bloque, sino que residir en tantos bloque como extensiones tenga. Por eso es crtico definir un buen tamao de extensin inicial, ya que, si es lo suficientemente grande, el objeto nunca estar fragmentado.

26

GESTIN DE BASES DE DATOS


Si el objeto tiene muchas extensiones y stas estn muy separadas en disco, las consultas pueden retardarse considerablemente, ya que las cabezas lectoras tienes que dar saltos constantemente. La mejor solucin es calcular el tamao que tendr el objeto (tabla o ndice), multiplicando el tamao de cada fila por una estimacin del nmero de filas. Cuando hemos hecho este clculo, debemos utilizar este tamao como extensin INITIAL y NEXT, y tendremos prcticamente la certeza de que no se va a producir fragmentacin en ese objeto. En caso de detectar ms de 10 extensiones en un objeto (consultando el catlogo de Oracle, como veremos), debemos recrear el objeto desde cero (aplicando el clculo anterior) e importar de nuevo los datos.

DATA BLOCKS - BLOQUES


Un bloque es la unidad mnima de almacenamiento de informacin de Oracle. A los bloques tambin se les conoce como "bloques de datos", "bloques lgicos" o "bloques oracle". Cada uno de estos bloques est formado por un nmero determinado de bloques del sistema operativo. A la hora de crear una nueva base de datos se debe indicar cuntos bloques de sistema operativo formarn un bloque de datos o bloque oracle. Es muy importante decidir bien este valor de antemano ya que una vez creada la base de datos ya no se puede modificar ms que en migraciones a versiones ms actuales del producto. Un bloque de datos es la mnima unidad de Lectura / Escritura en una base de datos Oracle, es decir, Oracle no lee y escribe en bloques del sistema operativo sino que lo hace en unidades lgicas que son los bloques de datos y que varan de una base de datos a otra en la misma mquina ya que es un valor que se debe indicar en la creacin de cada base de datos Oracle. Oracle recomienda que el tamao de un bloque de datos o, data block, sea siempre un mltiplo del bloque de datos del sistema operativo. En un disco duro no es posible que un fichero pequeo ocupe menos de lo que indique la unidad de asignacin, as si la unidad de asignacin es de 4 Kb, un fichero que ocupe 1 Kb, en realidad ocupa 4 Kb. Siguiendo con la cadena, cada segmento (o cada extensin) se almacena en uno o varios bloques de datos, dependiendo del tamao definido para el extensin, y del tamao definido para el datablock. El siguiente esquema muestra toda la cadena de almacenamiento de Oracle.

27

GESTIN DE BASES DE DATOS


Desde el nivel ms fsico al ms lgico: Unidades de asignacin del sistema operativo (El ms fsico. No depende de Oracle) Data blocks de Oracle Extents Segments DataFiles Tablespaces (El ms lgico)

El tamao de las unidades de asignacin del sistema operativo se define durante el particionado del disco duro (FDISK, FIPS), y el espacio de los data blocks de Oracle se define durante la instalacin y no puede ser cambiado. Como es lgico, el tamao de un data block tiene que ser mltiplo del tamao de una unidad de asignacin, es decir, si cada unidad de asignacin ocupa 4 K, los data blocks pueden ser de 4K, 8K, 12K para que en el sistema operativo ocupen 1, 2, 3 unidades de asignacin.

Esquema extrado del Oracle8 Concepts

STORAGE
Todo objeto que tenga ocupacin fsica en la Base de Datos, tendr una clusula storage en su sintaxis de creacin. El objetivo de esta clusula es definir ciertas propiedades de almacenamiento para el objeto creado, como puede ser tamao de la extensin inicial, tamao de las siguientes extensiones... Sintaxis: STORAGE (INITIAL entero {K|M} NEXT entero {K|M} {MINEXTENTS entero} {MAXEXTENTS entero | UNLIMITED} {PCTINCREASE % entero} ) Initial: Indica el tamao en bytes de la primera extensin que tendr el segmento. Se puede indicar despus del valor una "K" o "M" para que el valor sea interpretado como Kilobytes o Megabytes en lugar de bytes. Si no se pone explcitamente este parmetro en la creacin del segmento, se hereda por defecto el valor que tenga este parmetro en el tablespace en el que se est creando el segmento y que, si no se ha indicado tampoco, por defecto son 5 bytes. Cuando se crea una extensin oracle redondea el tamao indicado al siguiente mltiplo superior a 5 bloques de datos. Por lo tanto, si nuestros bloques son de 8192 bytes y creamos un segmento con un inital de 256Kbytes, realmente estamos creando un segmento de 32 bloques y oracle lo redondea a 35 bloques que es el primer mltiplo superior a 5 de 32. Por lo tanto, nuestra initial extent ser de 35 * 8192 = 280 Kbytes.

28

GESTIN DE BASES DE DATOS


Para comprobar estos datos se puede consultar la tabla dba_segments en la que tenemos un registro por cada segmento distinto: Select segment_name, initial_extent, next_extent, pct_increase, min_extent, max_extent from dba_segments; Tambin se puede consultar la vista dba_extents que es un detalle de dba_segments ya que aqu se detalla por cada segmento todas sus extensiones, con su tamao en concreto. Select segment_name, extent_id, blocks, bytes from dba_extents; A pesar de lo que aparece en la documentacin de Oracle sobre los redondeos a mltiplos de 5 bloques, nos hemos encontrado con muchos casos en los que creamos segmentos con una sola extensin de 256 Kbytes con bloques de 8192 bytes (con el caso anterior), y en la vista dba_extents, al consultar el valor de initial_extent sigue siendo 256 Kbytes, y en dba_extents, que es donde debera redondearse realmente dicho valor a un mltiplo de 5, algunas extensiones aparecen con 256 Kbytes y otras con los 280 Kbytes que tericamente deberan tener. Next: Indica el tamao que tendr la prxima extensin que se cree cuando no quede ms sitio en las extensiones que ya tiene asignadas el segmento. De igual manera que en el caso del parmetro initial, Oracle redondea a un mltiplo de 5 bloques este valor, a la hora de crear la extensin nueva. Cada vez que se crea una nueva extensin, se recalcula el valor de este parmetro en funcin del valor de pctincrease y se actualiza la vista dba_segments. Pctincrease: En el momento que se asigna una nueva extensin al segmento, se recalcula el valor que va a tener la prxima que se le asigne y que ser, el tamao de la extensin recin creada (el next que tena el segmento) aumentado en el porcentaje indicado por pctincrease. Por lo tanto, si qeremos que todas las extensiones de nuestro segmento tengan el mismo tamao, habr que asignarles el pctincrease a 0. Oracle recomienda establecer por norma el pctincrease a 0 para evitar que se descontrolen los tamaos de los segmentos, especialmente los temporales, aunque, curiosamente, su valor por defecto es de 50%. No se puede modificar el pctincrease de los segmentos de rollback que es siempre 0. Mostremos un ejemplo: tenemos un segmento que en el campo next_extent tiene como valor 262144 y en pct_increase tiene 50 y los bloques son de 8192 bytes. Cuando crezca el segmento y solicite una nueva extensin, sta se crear del tamao indicado en next_extent redondendola al primer mltiplo de 5 bloques superior o igual a dicho valor. En nuestro caso 262144 son 32 bloques as que crear una extensin de 35 que son 286720 bytes. Adems, recalcula el valor del siguiente next_extent aumentando en un 50% el valor del antiguo next_extent, es decir 262144 * 1,5 = 393216 bytes. Nota: el reclculo del siguiente extent (393216) se basa en el valor del anterior next_extent (262144) y no en el valor de la extensin creada al redondear a un mltiplo de 5 bloques (286720), ya que si no, nos habra salido un next_extent de 286720 * 1,5 = 430080. Por lo tanto, al consultar las tabla dba_segments veremos que next_extent es 393216 es decir 48 bloques, aunque, eso si, si se vuelve a llenar esta extensin, se crear realmente una extensin de 50 bloques que son los 430080 bytes.

29

GESTIN DE BASES DE DATOS

Minextents: Se indica el nmero de extensiones que se deben reservar a la vez para un determinado segmento en el momento de su creacin. Por defecto es una excepto en los segmentos de rollback que son dos. Puede que las extensiones no estn contiguas. Por supuesto, si en la clusula storage en la cracin del objeto se indican valores para next y pctincrease, las extensiones iniciales que se crean se recalculan para cumplir lo indicado en estos parmetros. Por ejemplo, creamos un segmento con minextents = 4, con un initial de 262144, next de tambin 262144, bytes y con un pctincrease del 50%, el resultado ser la creacin de 4 extensiones de tamaos, 286720, 286720, 409600, 614400 y de un next extent de 884736. Estos tamaos vienen de redondear 32, 48 y 72 a mltiplos de 5 y el next extent es 108 bloques que es el 50% de 72 bloques. Maxextents: Es el numero mximo de extensiones que se pueden crear en ese objeto, contando tambin la primera. Se puede especificar UNLIMITED con lo que pueden crecer indefinidamente. No se recomienda que a los segmentos de rollback se les asigne unlimited maxextents ya que con operaciones complejas podran aumentar excesivamente de tamao y llenaran el disco. As que hay que tener cuidado a la hora de crear rollback segments, sobretodo porque heredan por defecto el valor del parmetro que tenga asignado el tablespace en el que se crean. Vamos a poner un ejemplo de creacin de una tabla en la que se indican valores para los parmetros de la clusula storage que acabamos de explicar. Crearemos, por ejemplo, una tabla llamada empleado que contiene un solo campo, nombre, con un initial extent de 256 Kilobytes, con 512 Kilobytes de next extent, un pctincrease de 50, con 3 extensiones iniciales y con un mximo de 10 extensiones: create table empleado (nombre varchar2(50)) storage (initial 256K next 512K pctincrease 50 minextents 3 maxextents 10) Si consultamos la vista dba_extents nos mostrar que ha creado las 3 extensiones que le hemos indicado con los siguientes valores: Select extent_id, bytes, blocks from dba_extents where segment_name = 'EMPLEADO' order by extent_id; 0 1 2 286720 532480 819200 35 65 100

Y, al consultar la vista dba_segments o incluso la vista user_tables para este segmento en concreto, observamos el valor de next_extent: Select next_extent from user_extents where segment_name = 'EMPLEADO'; 1179648 que es el resultado de 512K * 1,5 * 1,5.

30

GESTIN DE BASES DE DATOS


Cuando Oracle necesita asignar una nueva extensin a un segmento realiza el siguiente proceso para buscar bloques de datos contiguos en igual nmero o superior al solicitado por la extensin: En primer lugar, busca un conjunto de bloques contiguos igual al solicitado por la extensin ms uno, para evitar la fragmentacin (excepto cuando la extensin es de 5 o menos bloques). Por lo tanto, si la extensin nueva es de 29 bloques oracle buscar un conjunto de justo 30 bloques libres consecutivos. Si no encuentra ningn conjunto de exactamente ese nmero de bloques, empieza a buscar un conjunto de ms bloques contiguos. Si el primer conjunto que encuentra tiene ms de 5 bloques que los que busca, se queda solamente con los que busca, mientras que si la diferencia es de menos de 5 bloques, se coge todo el conjunto.

Por lo tanto, en nuestro caso, si el primer conjunto que encuentra fuera de 35 o ms bloques, cogera solo los 30 primeros, mientras que si encuentra un conjunto de entre 31 y 34 se lo quedara entero. Nota: En este paso se puede comprobar que, aunque a un segmento le asignemos pctincrease 0, puede que luego nos encontremos en dba_extents algun extensin algo ms grande que otras del mismo segmento. Cuando no encuentra ningn conjunto de bloques de tamao superior al que busca, realiza un coalesce del tablespace, que es un proceso mediante el cual se unen los distintos bloques que han ido quedndose fragmentados en el tablespace al irse creando y eliminando extensiones mediante este proceso. Una vez hecho el coalesce, Oracle vuelve a repetir los pasos anteriores. Si, finalmente no encuentra ningn conjunto de bloques para crear la nueva extensin, intenta aumentar el tamao de alguno de los datafiles del tablespace. Esto solamente lo conseguir si tienen activado el autoexpand. En caso de no conseguirlo, devolver un error. CREATE TABLE FACULTAD ( CODIGO_FACULTAD NUMBER(3) NOT NULL, DETALLE VARCHAR2(10) NOT NULL, CONSTRAINT PK_FACULTAD PRIMARY KEY(CODIGO_FACULTAD) ON DELETE CASCADE TABLESPACE UNIVERSIDAD STORAGE ( INITIAL 2M NEXT 640K PCTINCREASE 50 MINEXTENTS 2 MAXEXTENTS 100) );

31

GESTIN DE BASES DE DATOS CAPITULO III


Programacin en PL/SQL
El lenguaje de programacin de Oracle, llamado PL/SQL, es un lenguaje portable, procedural y de transaccin muy potente y de fcil manejo que ampla la funcionalidad de SQL aadiendo estructuras habituales en otros lenguajes de programacin como: Variables y tipos (predefinidos y definidos por el usuario) Estructuras de control (bucles y condiciones IF-THEN-ELSE) Procedimientos y funciones Tipos de objetos y mtodos

con las siguientes caractersticas fundamentales: 1. Incluye todos los comandos de SQL estudiados anteriormente 2. SELECT INSERT UPDATE DELETE.

Es una extensin de SQL, ya que este es un lenguaje no completo dado que no incluye las herramientas clsicas de programacin. Por eso, PL/SQL amplia sus posibilidades al incorporar las siguientes sentencias: Control condicional
IF ... THEN ... ELSE ... ENDIF

Ciclos
FOR ... LOOP WHILE ... LOOP

3. -

Incorpora opciones avanzadas en: Control y tratamiento de errores llamado excepciones. Manejo de cursores.

Creacin de programas PL/SQL.


Podemos crear programas con cualquier editor y ejecutarlos desde el prompt de sql con START o @. Los ficheros creados sern de texto y tendrn la extensin sql. Para que un fichero se ejecute correctamente debe tener en su ltima lnea el smbolo /.

32

GESTIN DE BASES DE DATOS


Caractersticas de PL/SQL
La unidad bsica en PL/SQL es el bloque. Todos los programas de PL/SQL estn compuestos por bloques que pueden estar anidados.

Estructura del bloque de cdigo


Veamos a continuacin la organizacin del bloque de cdigo de PL/SQL, compuesto por cuatro secciones DECLARE, BEGIN, EXCEPTION y END como se detalla en el fuente 1:
/* --- Fuente 1 ----------------------------------------------------------[<< nombre del bloque >>] Etiqueta que identifica al Bloque. [DECLARE] Declaracin de Variable Constante Cursor

ExcepcinVariables BEGIN Cdigo. [EXCEPTION] Control y tratamiento de errores. Es el punto al que se transfiere el control del programa siempre que exista un problema. Los indicadores de excepcin pueden ser definidos por el usuario o por el sistema, como es por ejemplo la excepcin ZERO_DIVIDE. Las excepciones se activan automticamente al ocurrir un error, existiendo la definicin de la excepcin OTHERS que considera aquellos errores no definidos y que siempre se ubica al final de todas las excepciones. END [nombre del bloque]; Fin del Bloque.

Se inicializa con un valor que no se puede modificar. Area de trabajo que contiene los datos de la fila de la tabla en uso. El cursor es el resultado de una sentencia SELECT. para control de errores.

Con el ejemplo del fuente 2 ilustraremos las distintas secciones que componen un bloque de cdigo en PL/SQL. En este caso deseamos calcular la venta promedio del da y, en caso que la misma sea menor a lo esperado, se debe registrar en la tabla VENTABAJA.
/* --- Fuente 2 ----------------------------------------------------------DECLARE esperada CONSTANT NUMBER(5) := 500; xtotal NUMBER; xcant NUMBER; xprom NUMBER; BEGIN /*Asigna a la variable xtotal el TOTAL de las ventas y a la variable xcant la cantidad de ventas del da. */ SELECT SUM(valor),COUNT(valor) INTO xtotal,xcant FROM ventas WHERE fecha=sysdate; xprom:=xtotal/xcant; IF xprom >= esperada THEN message('Ventas por encima de la esperada'); pause; ELSE /*Se registra en la tabla ventabaja las ventas por debajo

33

GESTIN DE BASES DE DATOS


del promedio esperado */ INSERT INTO ventabaja VALUES (sysdate,xprom); END IF; EXCEPTION WHEN ZERO_DIVIDE THEN message('No se realizaron ventas en el da'); pause; WHEN OTHERS THEN message('Error Indefinido'); pause; END;

Podemos crear diferentes tipos de bloques:

Bloques annimos: Se construyen de forma dinmica y se suelen ejecutar una sola vez. Bloques nominados: Igual que los annimos pero con una etiqueta que les da nombre. Subprogramas: Procedimientos, paquetes y funciones, almacenados en la BD y que se ejecutan en mltiples ocasiones. Los subprogramas se ejecutarn mediante una llamada. Disparadores (Triggers): Bloques nominados que se almacenan en la BD y se ejecutan ante algn suceso. Para dar nombre a un bloque se le pone una etiqueta antes del DECLARE . <<etiqueta>> Para transformar un bloque en un procedimiento almacenado reemplazamos la palabra clave DECLARE por CREATE OR REPLACE PROCEDURE nombre_procedimiento AS .

Comentarios
Los comentarios pueden ser multilnea encerrados entre /* y */ o monolnea, que comienzan por

Variables y tipos:
Las variables deben declararse dentro de la seccin DECLARE, cada una debe tener su tipo asociado. Las variables pueden ser de los mismos tipos que las columnas de una base de datos:
DECLARE v_NombreEstudiante v_FechaActual v_Puntos VARCHAR2(20); DATE; NUMBER(3);

Tambin existen otros tipos adicionales (enteros binarios y lgicos):


DECLARE v_ContadorBucle BINARY_INTEGER; v_Registrado BOOLEAN;

BINARY_INTEGER: Se usa para almacenar valores que slo van a ser utilizados en clculos y no se van a almacenar en la BBDD. BOOLEAN: Pueden contener los valores TRUE,FALSE o NULL. Sintaxis:

34

GESTIN DE BASES DE DATOS


nombre_variable tipo [CONSTANT] [NOT NULL] [:=valor]

El atributo %TYPE permite declarar una variable del mismo tipo que otra ya existente, especialmente til para declarar variables del mismo tipo que atributos de una tabla.
NombreVariable variableReferencia%TYPE;

Identificadores
Los identificadores vlidos empiezan por una letra que puede ser seguida de una secuencia de caracteres que puede incluir letras, nmeros,$ ,_ ,#. La longitud mxima de un identificador es de 30 caracteres.

Literales
Podremos utilizar literales numricos (enteros y reales), booleanos (TRUE,FALSE Y NULL) y de carcter (uno o ms caracteres delimitados por comillas simples).

Asignacin de valores
Las dos formas que existen para asignar valores a variables de memoria, vistas en el ejemplo anterior, son: Con el operador de asignacin :=, como cuando calculamos el promedio de las ventas asignndole valor a la variable xprom con la siguiente sentencia:
xprom:=xtotal/xcant;

Con la sentencia SELECT que contiene la orden INTO, como se muestra, es la asignacin de valores a las variables xtotal y xcant con el siguiente cdigo:
SELECT SUM(valor), COUNT(valor) INTO xtotal,xcant FROM ventas WHERE fecha=sysdate;

Veamos a continuacin, con la creacin del procedimiento FECHAALTA, la asignacin de valores a una variable de registro llamada Client_Rec, que va a contener la estructura de una fila de la tabla CLIENTES y que estar formada por todos los campos correspondientes a la tabla. Para esto usaremos el atributo de variable %ROWTYPE que declara una variable de registro que contiene la estructura de la tabla, y despus, con el uso de la sentencia SELECT * INTO, se asigna a la variable de registro los valores de la fila. La referencia a un dato contenido en la variable de registro se hace de la forma variable_registro.campo, como por ejemplo cliente_rec.fecha hace referencia a la fecha del alta del cliente. Pasemos a mostrar lo anteriormente expuesto a travs del cdigo del fuente 3.

35

GESTIN DE BASES DE DATOS

/* --- Fuente 3 ----------------------------------------------------------PROCEDURE FECHAALTA IS BEGIN DECLARE cliente_rec clientes%ROWTYPE; BEGIN SELECT * INTO cliente_rec FROM clientes WHERE codigo = 5; IF cliente_rec.fecha>sysdate-10 THEN message( cliente_rec.nombre|| ' Dado de alta en los ltimos 10 das'); pause; ELSE message( cliente_rec.nombre|| ' Dado de alta hace ms de 10 das'); pause; END IF; END; END;

SELECT con control de excepciones


La sentencia SELECT en PL/SQL no muestra en pantalla las filas resultantes de la consulta, como ocurre en SQL (el cual trabaja en forma interactiva) sino que, segn sea la accin a realizar, as ser la cantidad de filas devueltas por la consulta, existiendo en este caso una de las tres posibles situaciones recogidas en la tabla 1: Cantidad de filas Una Ms de una Ninguna Accin Se realiza la siguiente sentencia Ocurre la excepcin TOO_MANY_ROWS Ocurre la excepcin NO_DATA_FOUND

Tabla 1: Situaciones posibles segn la bsqueda realizada

Por esta razn, veremos a continuacin, a travs de un ejemplo, el uso de la sentencia SELECT, con control de excepciones para definir la accin a realizar en dependencia de la cantidad de filas devueltas por la consulta. Veamos con el cdigo del fuente 4 en el que se define el procedimiento VentasDe para consultar las ventas realizadas en el da de un determinado artculo:
/* --- Fuente 4 ----------------------------------------------------------PROCEDURE ventasde(xarticulo ventas.articulo%TYPE) is BEGIN DECLARE xnombre clientes.nombre%TYPE; xventas NUMBER; BEGIN SELECT nombre into xnombre FROM clientes,ventas WHERE clientes.codigo=ventas.codigo AND

36

GESTIN DE BASES DE DATOS


ventas.fecha=sysdate AND articulo=xarticulo; message( 'Solo una venta de ' xarticulo' a: 'xnombre); EXCEPTION WHEN NO_DATA_FOUND THEN message('No hay ventas de '||xarticulo); pause; WHEN TOO_MANY_ROWS THEN SELECT COUNT(*) INTO XVENTAS FROM ventas WHERE ventas.fecha=sysdate AND articulo=xarticulo; message( TO_CHAR(xventas) ' Ventas de 'xarticulo); pause; WHEN OTHERS THEN message('Error Indefinido'); pause; END; END;

Este procedimiento ventasde recibe un parmetro que es el nombre del artculo a consultar, por lo cual, para ejecutarlo, se debe escribir ventasde('PAPEL'). Obsrvese tambin que la sentencia SELECT COUNT(*) INTO, usada en este ejemplo, siempre devuelve una fila, ya que no existe formacin de grupos al no estar presente la orden GROUP BY. Por lo tanto, en este caso la nica accin posible a realizar es pasar a la siguiente sentencia, o sea, no se requiere control de excepciones.

Estructuras de Control
Este tema muestra como estructurar el flujo de control dentro de un programa PL/SQL. Se podr entender como las distintas sentencias se encuentran conectadas mediante un poderoso y simple control de estructuras que constan de un punto de entrada y uno de salida. En su conjunto estas estructuras pueden manejar cualquier situacin y permiten una correcta estructuracin del programa. De acuerdo con el Teorema de la Estructura, cualquier programa computacional puede ser escrito utilizando las estructuras bsicas de control que se muestran en la figura 4-1. Estas se pueden combinar de todas las maneras necesarias para alcanzar la solucin de un problema dado. Las estructuras de seleccin verifican cierta condicin, despus ejecutan cierta secuencia de expresiones dependiendo si la condicin result ser verdadera o falsa. Una condicin es cualquier variable o expresin que retorna un valor booleano (TRUE o FALSE). Las estructuras de iteracin ejecutan una secuencia de sentencias repetidamente mientras la condicin permanezca verdadera. Las estructuras de secuencia simplemente ejecutan una secuencia de estamentos en el orden que ocurren.

37

GESTIN DE BASES DE DATOS


S e l e c c i n Ite r a ci n S e c u e n c ia

F T

Figura 4-1:

Estructuras de Control

Control Condicional: Sentencia IF


A menudo es necesario tomar alternativas de accin dependiendo de las circunstancias. La sentencia IF permite ejecutar una secuencia de acciones condicionalmente. Esto es, si la secuencia es ejecutada o no depende del valor de la condicin a evaluar. Existen tres modos para esta instruccin: IF THEN, IF THEN ELSE y IF THEN ELSIF.

IF THEN
Este es el modo ms simple y consiste en asociar una condicin con una secuencia de sentencias encerradas entre las palabras reservadas THEN y END IF (no ENDIF).
IF condicin THEN secuencia_de_sentencias END IF;

La secuencia de sentencias es ejecutada slo si la condicin es verdadera. Si la condicin es falsa o nula no realiza nada. Un ejemplo real de su utilizacin es la siguiente:
IF condicin THEN calcular_bonus (emp_id) UPDATE sueldos SET pago = pago + bonus WHERE emp_no = emp_id; END IF;

IF THEN ELSE
Esta segunda modalidad de la sentencia IF adiciona una nueva palabra clave: ELSE, seguida por una secuencia alternativa de acciones:
IF condicin THEN secuencia_de_sentencias_1 ELSE secuencia_de_sentencias_2 END IF;

La secuencia de sentencias en la clusula ELSE es ejecutada solamente si la condicin es falsa o nula. Esto implica que la presencia de la clusula ELSE asegura la ejecucin de alguna de las dos secuencias de estamentos. En el ejemplo siguiente el primer UPDATE es ejecutado cuando la condicin es verdadera, en el caso que sea falsa o nula se ejecutar el segundo UPDATE:
IF tipo_trans = CR THEN UPDATE cuentas SET balance = balance + credito WHERE ELSE UPDATE cuentas SET balance = balance debito WHERE END IF;

38

GESTIN DE BASES DE DATOS


Las clusulas THEN y ELSE pueden incluir estamentos IF, tal como lo indica el siguiente ejemplo:
IF tipo_trans = CR THEN UPDATE cuentas SET balance = balance + credito WHERE ELSE IF nuevo_balance >= minimo_balance THEN UPDATE cuentas SET balance = balance debito WHERE ELSE RAISE fondos_insuficientes; END IF; END IF;

IF THEN ELSIF
Algunas veces se requiere seleccionar una accin de una serie de alternativas mutuamente exclusivas. El tercer modo de la sentencia IF utiliza la clave ELSIF (no ELSEIF) para introducir condiciones adicionales, como se observa en el ejemplo siguiente:
IF condicin_1 THEN secuencia_de_sentencias_1 ELSIF condicin_2 THEN secuencia_de_sentencias_2 ELSE secuencia_de_sentencias_3 END IF;

Si la primera condicin es falsa o nula, la clusula ELSIF verifica una nueva condicin. Cada sentencia IF puede poseer un nmero indeterminado de clusulas ELSIF; la palabra clave ELSE que se encuentra al final es opcional. Las condiciones son evaluadas una a una desde arriba hacia abajo. Si alguna es verdadera, la secuencia de sentencias que corresponda ser ejecutada. Si cada una de las condiciones analizadas resultan ser falsas, la secuencia correspondiente al ELSE ser ejecutada:
BEGIN IF

sueldo > 50000 THEN bonus : = 1500; ELSIF sueldo > 35000 THEN bonus : = 500; ELSE bonus : = 100; END IF; INSERT INTO sueldos VALUES (emp_id, bonus, );

END;

Si el valor de sueldo es mayor que 50.000, la primera y segunda condicin son verdaderas, sin embargo a bonus se le asigna 1500, ya que la segunda condicin jams es verificada. En este caso slo se verifica la primera condicin para luego pasar el control a la sentencia INSERT.

Controles de Iteracin: Las sentencias LOOP y EXIT


La sentencia LOOP permite ejecutar una secuencia de acciones mltiples veces. Todas ellas gobernadas por una condicin que regula la ejecucin de la iteracin. Existen tres modalidades para esta instruccin: LOOP, WHILE LOOP y FOR LOOP.

LOOP 39

GESTIN DE BASES DE DATOS


El modo bsico (o infinito) de LOOP encierra una serie de acciones entre las palabras clave LOOP y END LOOP, como en el siguiente ejemplo:
LOOP secuencia_de_instrucciones END LOOP;

Ej.

Con cada iteracin del ciclo las sentencias son ejecutadas. Para terminar estos ciclos de ejecucin se utiliza la palabra clave EXIT. Es posible ubicar innumerables EXIT dentro del loop, obviamente ninguno fuera de l. Existen dos modalidades para utilizar esta sentencia: EXIT y EXIT WHEN.

EXIT
La clusula EXIT obliga al loop a concluir incondicionalmente. Cuando se encuentra un EXIT en el cdigo, el loop es completado inmediatamente y pasa el control a la prxima sentencia.
LOOP IF ranking_credito < 3 THEN EXIT; --Termina el loop inmediatamente END IF; END LOOP;

Es necesario recordar que esta sentencia debe estar dentro del loop. Para completar un bloque PL/SQL antes de que su final natural sea alcanzado, es posible utilizar la instruccin RETURN.

EXIT WHEN
Esta sentencia permite terminar el loop de manera condicional. Cuando se encuentra un EXIT la condicin de la clusula WHEN es evaluada. Si la condicin es verdadera el loop es terminado y el control es pasado a la prxima sentencia. Ejemplo:
LOOP FECTH c1 INTO EXIT WHEN c1%NOTFOUND; -- termina el loop si la condicin es verdadera

40

GESTIN DE BASES DE DATOS


END LOOP; CLOSE c1;

Hasta que la condicin no sea verdadera el loop no puede completarse, esto implica que necesariamente dentro de las sentencias el valor de la condicin debe ir variando. En el ejemplo anterior si la ejecucin de FETCH retorna una fila la condicin es falsa. Cuando FETCH falla al retornar una fila, la condicin es verdadera por lo que el loop es completado y el control es pasado a la sentencia CLOSE. La sentencia EXIT WHEN reemplaza la utilizacin de un IF. A modo de ejemplo se pueden comparar los siguientes cdigos:
IF count > 100 THEN EXIT; END IF; | | | EXIT WHEN count > 100;

Ambos cdigos son equivalentes, pero el EXIT WHEN es ms fcil de leer y de entender.

Etiquetas
En todos los bloques escritos en PL/SQL, los ciclos pueden ser rotulados. Un rtulo es un identificador encerrado entre los signos dobles << y >> y debe aparecer al comienzo de un loop, como se muestra a continuacin:
<<rtulo>> LOOP secuencia de sentencias END LOOP;

La ltima sentencia puede cambiarse tambin por END LOOP rtulo;

WHILE - LOOP
Esta sentencia se asocia a una condicin con una secuencia de sentencias encerradas por las palabras clave LOOP y END LOOP, como sigue:
WHILE condicin LOOP secuencia_de_sentencias END LOOP;

Ej.

Antes de cada iteracin del ciclo se evala la condicin. Si sta es verdadera se ejecuta la secuencia de sentencias y el control se devuelve al inicio del loop. Si la condicin en falsa o nula, el ciclo se rompe y el control se transfiere a la prxima instruccin, fuera del loop.

FOR - LOOP
En las instrucciones anteriores el nmero de iteraciones es desconocido, mientras no se evala la condicin del ciclo. Con una instruccin del tipo FOR-LOOP, la iteracin se efecta un nmero finito (y conocido) de veces. La sintaxis de esta instruccin es la siguiente:

41

GESTIN DE BASES DE DATOS


FOR contador IN [REVERSE] valor_minimo..valor_maximo LOOP secuencia_de_sentencias END LOOP;

Ej.

El contador no necesita ser declarado porque por defecto se crea para el bloque que involucra el ciclo y luego se destruye. Por defecto, la iteracin ocurre en forma creciente, es decir, desde el menor valor aportado hasta el mayor. Sin embargo, si se desea alterar esta condicin por defecto, se debe incluir explcitamente en la sentencia la palabra REVERSE. Los lmites de una iteracin pueden ser literales, variables o expresiones, pero que deben evaluarse como nmeros enteros. Un contador de loop tiene validez slo dentro del ciclo. No es posible asignar un valor a una variable contadora de un loop, fuera de l. Ejemplo:
FOR cont IN 1..10 LOOP END LOOP; sum := cont + 1 ; -- Esto no est permitido

La sentencia EXIT tambin puede ser utilizada para abortar la ejecucin del loop en forma prematura. Por ejemplo, en el siguiente trozo de programa la secuencia normal debera completarse luego de 10 veces de ejecutarse, pero la aparicin de la clusula EXIT podra hacer que sta termine antes:
FOR j IN 1..10 LOOP FETCH c1 INTO emprec; EXIT WHEN c1%NOTFOUND; END LOOP;

O tambin se puede utilizar:


<<externo>> FOR i IN 1..5 LOOP FOR j IN 1..10 LOOP FETCH c1 INTO emprec; EXIT externo WHEN c1%NOTFOUND; END LOOP; END LOOP externo; -- el control retorna a esta lnea

-- sale de ambos ciclos

Controles de Secuencia: Las sentencias GOTO y NULL

42

GESTIN DE BASES DE DATOS


Ocasionalmente podra ser til la utilizacin de una sentencia de este tipo. A pesar de que es sabido que la sentencia GOTO redunda en un cdigo ms complejo y desordenado a veces podra cooperar en la implementacin de un programa. La sentencia nula puede cooperar con la fcil lectura del cdigo cuando este sobrepasa una cantidad determinada de instrucciones y torna ms difcil su comprensin.

GOTO
La sentencia GOTO obliga a saltar a un rtulo del programa en forma incondicional. El rtulo debe ser nico dentro de su alcance y debe preceder a una sentencia ejecutable o a un bloque PL/SQL. Cuando es ejecutada, esta instruccin transfiere el control a la sentencia o bloque rotulada. Los siguientes ejemplos ilustran una forma vlida de utilizar la sentencia GOTO y otra no vlida. Ejemplo vlido:
BEGIN <<actualiza>> BEGIN UPDATE emp SET END; GOTO <<<actualiza>> END;

Ejemplo no vlido:
DECLARE done BOOLEAN; BEGIN FOR i IN 1..50 LOOP IF done THEN GOTO fin_loop; END IF; <<fin_loop>> -- Ilegal END LOOP; -- Esta no es una sentencia ejecutable END;

Restricciones Algunas restricciones en la utilizacin de un GOTO son las siguientes: una sentencia de este tipo no puede saltar dentro de una sentencia IF, LOOP o un sub-bloque. Tampoco se puede utilizar GOTO dentro del bloque de excepciones para salir de l.

NULL
La sentencia NULL especifica explcitamente inaccin. No hace nada ms que pasar el control del programa a la siguiente sentencia. Tambin sirve como un comodn para hacer el cdigo ms entendible, advirtiendo que la alternativa sealada no requiere codificacin. Ejemplo:
EXCEPTION WHEN zero_divide THEN Rollback; WHEN value_error THEN INSERT INTO errores VALUES Commit; WHEN others THEN

43

GESTIN DE BASES DE DATOS


NULL; END;

Depuracin de programas, entrada y salida de datos por consola.


La forma normal de introducir datos en una BBDD no es a travs de un programa en PL/SQL, stos suelen realizar operaciones especficas dentro de la BBDD sin interaccin con un operador. En cualquier caso existen algunas funciones que nos pueden ayudar a depurar programas mostrando datos por pantalla o leyendo datos. Para mostrar un valor cadena podemos utilizar:
DBMS_OUTPUT.PUT_LINE(cadena)

En caso de que el valor a mostrar no sea una cadena puedes utilizar la funcin TO_CHAR() para transformarlo. El paquete DBMS_OUTPUT simplemente implementa una cola, si queremos que los datos aparezcan por pantalla tenemos que activar la opcin SERVEROUTPUT mediante la orden de SQL*Plus:
SET SERVEROUTPUT ON [SIZE tamao del buffer]

Esta orden llama de forma implcita a DBMS_OUTPUT.ENABLE que configura el buffer interno, adems con la opcin SERVEROUTPUT activada SQL*Plus llamar a DBMS_OUTPUT.GET_LINES despus de que se haya completado el bloque PL/SQL. De forma que la salida se visualizar en pantalla una vez completado el bloque PL/SQL. Una forma sencilla de leer valores de pantalla para utilizarlos puede ser con la instruccin de SQL ACCEPT y variables de sustitucin. (Variables disponibles en SQL distintas de las de PL/SQL). Una variable de sustitucin puede aparecer directamente en una sentencia SELECT sin necesidad de definirla, va precedida del smbolo & y SQL nos preguntar que valor queremos asignarle (la variable es sustituida por el literal que escribamos, si lo que escribimos queremos considerarlo como caracteres o fechas la pondremos entre comillas, para formar una cadena con el literal sustituido):

Al ejecutarse una instruccin SQL como las anteriores nos mostrar un mensaje en el PROMPT pidindonos el valor de la variable :

Especificaremos SET VERIFY OFF, si no queremos que SQL nos muestre por pantalla el valor anterior que tena la variable y el nuevo que toma.

44

GESTIN DE BASES DE DATOS


ACCEPT permite declarar una variable de SQL y leer su valor poniendo un mensaje en el Prompt.
ACCEPT variable [NUMBER|CHAR|DATE] [FORMAT] format] [PROMPT text]] [HIDE]

Para utilizar la variable accedemos a ella anteponindole el smbolo &. No podemos utilizar ACCEPT para leer variables dentro de un bloque PL/SQL, si queremos utilizarlo debemos hacerlo fuera!

Ordenes SQL en PL/SQL


Las nicas rdenes SQL permitidas en un programa PL/SQL con las del DML, y las de control de transacciones. Las rdenes DML permitidas con SELECT, INSERT, UPDATE y DELETE. PL/SQL permite utilizar variables dentro de una orden SQL all donde este permitido usar una expresin.(no todo componente de una orden SQL se puede reemplazar con una variable, slo las expresiones. En particular los nombres de tabla y de columna deben ser conocidos).

SELECT
Una orden SELECT extrae datos de la base de datos y los almacena en variables PL/SQL, podemos utilizar una lista de variables separadas por comas o una variable registro. Si la lista de seleccin es simplemente *, podra definirse este registro mediante nombre_tabla%ROWTYPE. Esta forma de la orden SELECT no debera devolver ms de una fila, si no es as PL/SQL nos devolver un mensaje de error. Para extraer ms de una fila en una consulta debe utilizarse un cursor para extraer individualmente cada fila.

45

GESTIN DE BASES DE DATOS

INSERT
Ejemplo del uso de INSERT:

Si la orden INSERT contiene un SELECT, la lista de seleccin debe corresponderse con las columnas que van a ser insertadas.

UPDATE
Ejemplo de uso: Si la orden contiene un SELECT, la lista de seleccin debe corresponderse con las columnas de la clusula SET.

DELETE
Elimina filas de una tabla, indicando la clusula

46

GESTIN DE BASES DE DATOS


WHERE de la orden qu filas hay que eliminar. Ejemplo:

Manejo de cursores
Para procesar una orden SQL, Oracle asigna un rea de memoria que recibe el nombre de rea de contexto. Esta rea contiene informacin sobre el procesamiento, como el nmero de filas procesadas por la orden y en caso de consultas el conjunto activo, que es el conjunto de filas resultado de la consulta.

Un cursor es un puntero al rea de contexto. Mediante un cursor, un programa PL/SQL puede controlar el rea de contexto, tendremos que utilizar un cursor, por ejemplo, para procesar las distintas filas de datos que devuelva una consulta: El conjunto de filas resultantes de una consulta con la sentencia SELECT, como vimos anteriormente, puede estar compuesto por ninguna, una o varias filas, dependiendo de la condicin que define la consulta. Para poder procesar individualmente cada fila de la consulta debemos definir un cursor (que es un rea de trabajo de memoria) que contiene los datos de las filas de la tabla consultada por la sentencia SELECT. Existen dos tipos de cursores :

Explcitos.- Necesitan declaracin Implcitos.- No necesitan declaracin

Los pasos para el manejo de cursores, tema novedoso en la programacin de Oracle con PL/SQL, son: Definir el cursor, especificando la lista de parmetros con sus correspondientes tipos de datos y estableciendo la consulta a realizar con la sentencia SELECT. Abrir el cursor para inicializarlo, siendo ste el momento en que se realiza la consulta. Leer una fila del cursor, pasando sus datos a las variables locales definidas a tal efecto. Repetir el proceso fila a fila hasta llegar a la ltima. Cerrar el cursor una vez que se termin de procesar su ltima fila.

Declaracin del cursor


Define su nombre y asocia el cursor con una orden SELECT. La sintaxis es:
CURSOR nombre_cursor IS orden_SELECT;

47

GESTIN DE BASES DE DATOS


Una declaracin de cursor puede hacer referencia a variables PL/SQL en la clusula WHERE, cumplindose las reglas de mbito y visibilidad conocidas. Para asegurarse de que todas las variables referenciadas en una declaracin de cursor son declaradas antes de la referencia, pueden declararse todos los cursores al final de la seccin declarativa. El propio nombre del cursor puede emplearse en una referencia con el atributo %ROWTIPE. En este caso, el cursor debe ser declarado antes de hacer referencia a l.

Apertura de un cursor
La sintaxis para abrir un cursor es:
OPEN nombre_cursor;

Al abrir un cursor suceden tres cosas: Se examinan los valores de las variables acopladas. Se determina el conjunto activo. Se hace apuntar el puntero del conjunto activo a la primera fila.

Podemos reabrir un cursor que ya estaba abierto, PL/SQL ejecutar implcitamente una orden CLOSE antes de reabrirlo. Tambin podemos tener varios cursores abiertos al mismo tiempo.

Extraccin de los datos de un cursor


La clusula INTO de la consulta se incluye en la orden FETCH. Esta orden tiene dos formas posibles:
FETCH nombre_cursor INTO lista_variables; FETCH nombre_cursor INTO registro;

Despus de cada FETCH, se incrementa el puntero del conjunto activo para que apunte a la siguiente fila. De esta forma con un bucle cada FETH devolver filas sucesivas del conjunto activo. El atributo de cursores %NOTFOUND se utiliza para determinar cuando se ha terminado de extraer todo el conjunto activo.

Cierre de un cursor
Cuando se ha terminado de extraer el conjunto activo debe cerrarse el cursor. La sintaxis para el cierre de un cursor es:
CLOSE nombre_cursor;

Atributos de los cursores


Existen cuatro atributos en PL/SQL que pueden aplicarse a los cursores para obtener valores sobre ellos y se unen al nombre del cursor y el resultado que devuelven es el siguiente:

%FOUND
Luego de que un curso ha sido abierto, pero antes de recuperar la primera fila el valor del atributo

48

GESTIN DE BASES DE DATOS


%FOUND es nulo. A continuacin, tomar el valor TRUE cada vez que obtenga una fila del set de resultados (en cada FETCH que se haga) y slo alcanzar el valor FALSE cuando ya no existan ms filas para mostrar en el set de resultados. Ejemplo:
LOOP FETCH c1 INTO IF c1%FOUND THEN ELSE EXIT; END IF; END LOOP;

-- fetch exitoso -- fetch fall; se sale del loop

%NOTFOUND
Es el opuesto lgico de %FOUND. Cada vez que una sentencia FETCH retorne una fila vlida, este atributo devolver FALSO. Slo alcanzar el valor TRUE cuando no haya ms filas en un cursor y se ejecute la sentencia FETCH (sin xito por lo tanto). Ejemplo:
LOOP FETCH c1 INTO EXIT WHEN c1%NOTFOUND; END LOOP;

%ISOPEN
Este atributo toma el valor verdadero (TRUE) cuando un cursor se encuentra abierto. De otra manera, retorna FALSO.

%ROWCOUNT
Cuando un cursor es abierto, este atributo es seteado en 0 (cero). En adelante, cada vez que se recuperen filas exitosamente con un FETCH, este valor se ir incrementando en uno. Cuando se utiliza con cursores implcitos, este atributo devuelve el total de filas afectadas por una instruccin del tipo INSERT, UPDATE o DELETE..

Cursores parametrizados
Se utiliza tambin la sentencia OPEN para pasar los parmetros al cursor, en caso de que ste los requiera. Por ejemplo:
DECLARE emp_name emp.name%TYPE; salary emp.sal%TYPE; CURSOR c1 (name VARCHAR2, salary NUMBER) IS SELECT

49

GESTIN DE BASES DE DATOS


Cualquiera de estas sentencias abre el cursor: OPEN c1(emp_name, 3000); OPEN c1(John, 1500); OPEN c1(emp_name, salary); Obsrvese que en este ejemplo, cuando se utiliza la variable salary en la declaracin se refiere al nombre del segundo parmetro del cursor. Sin embargo, cuando es usada en una sentencia OPEN se refiere a la variable del programa.

Cursores Implcitos
Los cursores explcitos sirven para procesar rdenes SELECT que devuelven ms de una fila. Sin embargo, todas las rdenes SQL se ejecutan dentro de un rea de contexto y tienen, por tanto, un cursor asociado. Este cursor se conoce con el nombre de cursor SQL y sirve para procesar las rdenes INSERT, UPDATE, DELETE, y las rdenes SELECT-INTO de una sola fila. ste se abre y cierra automticamente, pero podemos acceder a sus atributos. Se muestran dos ejemplos de su uso en los que se ejecuta una orden INSERT si la orden UPDATE no encuentra ninguna fila coincidente:

Aunque se puede emplear SQL%NOTFOUND con las rdenes SELECT-INTO, realmente no resulta til porque se producir un error Oracle cuando no encuentre ninguna fila coincidente.

50

GESTIN DE BASES DE DATOS


A continuacin veremos un ejemplo de cursor con las siguientes caractersticas: Objetivo: Nombre: Parmetros: Cdigo de definicin del cursor: Consultar las ventas de una fecha dada ordenadas de mayor a menor. CVENTAS. cfecha, variable que contiene la fecha a consultar.

Ver figura 1

Figura 1: Cdigo de definicin de cursor

Con el procedimiento VENTAS5 del fuente 5, mostraremos cmo usar el cursor cventa anteriormente definido, con el fin de registrar en la tabla VENTAMAYOR las 5 mayores ventas en una fecha dada.
/* --- Fuente 5 ----------------------------------------------------------PROCEDURE VENTAS5 (xfecha DATE) is BEGIN DECLARE CURSOR cventas (cfecha DATE) IS SELECT articulo,valor FROM ventas WHERE fecha=cfecha ORDER BY valor DESC; xarticulo xvalor BEGIN OPEN cventas(xfecha); FOR i IN 1..5 LOOP FETCH cventas INTO xarticulo,xvalor; EXIT WHEN cventas%NOTFOUND; INSERT INTO ventamayor VALUES (xfecha,xarticulo,xvalor); COMMIT; END LOOP; CLOSE cventas; END; END; ventas.articulo%TYPE; ventas.valor%TYPE;

Para llamar al procedimiento ventas5 en una fecha dada, se puede escribir, por ejemplo:

51

GESTIN DE BASES DE DATOS


ventas5(to_date('15/11/95','DD/MM/YY')

o
ventas5(sysdate).

A continuacin detallaremos las sentencias usadas en este procedimiento:


DECLARE cursor

Define el cursor, su consulta y la lista de parmetros que se pasan a la orden WHERE, es solo la declaracin del cursor y no la realizacin de la consulta.
xarticulo ventas.articulo%TYPE;

Define la variable xarticulo igual a la columna articulo de la tabla ventas, que con el uso del atributo de variable %TYPE permite declarar una variable del mismo tipo que una columna de la tabla. No es necesario conocer cmo est definida esa columna en la tabla y, en caso que la definicin de la columna sea modificada, automticamente se cambia la variable xarticulo.
OPEN cventas(xfecha);

Realiza la consulta asociada al cursor, pasando el valor del parmetro y guardando sus resultados en un rea de la memoria, desde la cual, posteriormente, se pueden leer estas filas.
FOR i IN 1..5 LOOP

Ciclo numrico de repeticin para poder consultar las 5 primeras ventas devueltas por el cursor.
FETCH cventas INTO xarticulo,xvalor;

Lee la siguiente fila de datos del cursor cventas y pasa los datos de la consulta a las variables xarticulo y xvalor.
EXIT WHEN cventas%NOTFOUND;

Garantiza la salida del ciclo antes de la ltima repeticin, en caso que para una fecha dada se hayan efectuado menos de 5 ventas, ya que en esta situacin la consulta del cursor devuelve menos de 5 filas. %NOTFOUND es un atributo de cursor que es verdadero cuando la ltima sentencia FETCH no devuelve ninguna fila.

52

GESTIN DE BASES DE DATOS

INSERT INTO ventamayor VALUES(xfecha,xarticulo,xvalor);

Insertar en la tabla ventamayor los valores ledos desde el cursor.


COMMIT;

Actualizacin de la tabla ventamayor.


END LOOP;

Fin del ciclo.


CLOSE cventas;

Cierra el cursor, eliminado sus datos del rea de memoria.

Bucles de cursor FOR


Podemos crear bucles de extraccin mediante cursor con LOOP-END LOOP como se mostraba en el ejemplo inicial o tambin con WHILE, pero requieren un procesamiento explcito de las rdenes OPEN, FETCH y CLOSE. PL/SQL proporciona un bucle ms simple que realiza un procesamiento implcito del cursor. Este bucle se llama Bucle de cursor FOR. Veamos su uso con un ejemplo:

53

GESTIN DE BASES DE DATOS

El registro utilizado lo declara implcitamente PL/SQL como nombre_curosor%ROWTYPE y no es necesario declararlo en seccin declarativa del bloque.

Cursores SELECT FOR UPDATE


Es habitual que el procesamiento que se lleve a cabo en un bucle de extraccin modifique las filas extradas por el cursor. PL/SQL proporciona una sintaxis especfica para estos casos. El mtodo consta de dos partes: la clusula FOR UPDATE en la declaracin del cursor, y la clusula WHERE CURRENT OF en la orden UPDATE o DELETE. Si se declara el cursor con la clusula FOR UPDATE, puede emplearse la clusula WHERE CURRENT OF en una orden UPDATE o DELETE. Veamos su uso con un ejemplo:

54

GESTIN DE BASES DE DATOS

Manejo de errores
En PL/SQL una advertencia o condicin de error es llamada una excepcin. Estas pueden ser definidas en forma interna (en tiempo de ejecucin de un programa) o explcitamente por el usuario. Ejemplos de excepciones definidas en forma interna son la divisin por cero y la falta de memoria en tiempo de ejecucin. Estas mismas condiciones excepcionales tienen sus nombres propios y pueden ser referenciadas con ellos: zero_divide y storage_error. Tambin se pueden definir excepciones a medida y nombrarlas de alguna forma, utilizando reglas. Cuando ocurre un error se alcanza la excepcin, esto quiere decir que se ejecuta la porcin del programa donde sta se encuentra implementada, transfirindose el control a ese bloque de sentencias. Las excepciones definidas por el usuario deben ser alcanzadas explcitamente utilizando la sentencia raise. Con las excepciones se pueden manejar los errores cmodamente sin necesidad de mantener mltiples chequeos por cada sentencia escrita. Tambin provee claridad en el cdigo desde el momento en que permite mantener las rutinas correspondientes al tratamiento de los errores en forma separada de la lgica del negocio.

55

GESTIN DE BASES DE DATOS


Excepciones predefinidas
Las excepciones predefinidas no necesitan ser declaradas. Simplemente se utilizan cuando estas son disparadas por algn error determinado. La siguiente es la lista de las excepciones predeterminadas por PL/SQL y una breve descripcin de cundo son accionadas:
Nombre Excepcin ACCESS_INTO_NULL COLLECTION_IS_NULL CURSOR_ALREADY_OPEN Se dispara cuando El programa intent asignar valores a los atributos de un objeto no inicializado El programa intent asignar valores a una tabla anidada an no inicializada El programa intent abrir un cursor que ya se encontraba abierto. Recuerde que un cursor de ciclo FOR automticamente lo abre y ello no se debe especificar con la sentencia OPEN El programa intent almacenar valores duplicados en una columna que se mantiene con restriccin de integridad de un ndice nico (unique index) El programa intent efectuar una operacin no vlida sobre un cursor En una sentencia SQL, la conversin de una cadena de caracteres hacia un nmero falla cuando esa cadena no representa un nmero vlido El programa intent conectarse a Oracle con un nombre de usuario o password invlido Una sentencia SELECT INTO no devolvi valores o el programa referenci un elemento no inicializado en una tabla indexada El programa efectu una llamada a Oracle sin estar conectado PL/SQL tiene un problema interno Los elementos de una asignacin (el valor a asignar y la variable que lo contendr) tienen tipos incompatibles. Tambin se presenta este error cuando un parmetro pasado a un subprograma no es del tipo esperado El parmetro SELF (el primero que es pasado a un mtodo MEMBER) es nulo La memoria se termin o est corrupta El programa est tratando de referenciar un elemento de un arreglo indexado que se encuentra en una posicin ms grande que el nmero real de elementos de la coleccin El programa est referenciando un elemento de un arreglo utilizando un nmero fuera del rango permitido (por ejemplo, el elemento -1) La conversin de una cadena de caracteres hacia un tipo rowid fall porque la cadena no representa un nmero Se excedi el tiempo mximo de espera por un recurso en Oracle Una sentencia SELECT INTO devuelve ms de una fila Ocurri un error aritmtico, de conversin o truncamiento. Por ejemplo, sucede cuando se intenta calzar un valor muy grande dentro de una variable ms pequea El programa intent efectuar una divisin por cero SQLCODE -6530 -6531 -6511

DUP_VAL_ON_INDEX INVALID_CURSOR INVALID_NUMBER LOGIN_DENIED NO_DATA_FOUND NOT_LOGGED_ON PROGRAM_ERROR ROWTYPE_MISMATCH

-1 -1001 -1722 -1017 +100 -1012 -6501 -6504

SELF_IS_NULL STORAGE_ERROR SUBSCRIPT_BEYOND_COUNT

-30625 -6500 -6533

SUBSCRIPT_OUTSIDE_LIMIT SYS_INVALID_ROWID TIMEOUT_ON_RESOURCE TOO_MANY_ROWS VALUE_ERROR

-6532 -1410 -51 -1422 -6502

ZERO_DIVIDE

-1476

56

GESTIN DE BASES DE DATOS


Excepciones definidas por el usuario
PL/SQL permite al usuario definir sus propias excepciones, las que debern ser declaradas ydisparadas explcitamente utilizando otros comandos del lenguaje.

Declaracin
Las excepciones slo pueden ser declaradas en el segmento Declare de un bloque, subprograma o paquete. Se declara una excepcin escribiendo su nombre seguida de la palabra clave EXCEPTION. Las declaraciones son similares a las de variables, pero recuerde que una excepcin es una condicin de error, no un tem de datos. Aun as, las mismas reglas de alcance aplican tanto sobre variables como sobre las excepciones. Ejemplo:
DECLARE error_01 EXCEPTION;

Reglas de Alcance
Una excepcin no puede ser declarada dos veces en un mismo bloque. Tal como las variables, una excepcin declarada en un bloque es local a ese bloque y global a todos los sub-bloques que comprende.

La sentencia RAISE
La sentencia RAISE permite gatillar una excepcin en forma explcita. Es factible utilizar esta sentencia en cualquier lugar que se encuentre dentro del alcance de la excepcin. Ejemplo:
DECLARE out_of_stock EXCEPTION; total NUMBER(4); BEGIN IF total < 1 THEN RAISE out_of_stock; END IF; EXCEPTION WHEN out_of_stock THEN -- manejar el error aqu WHEN OTHERS THEN END; -- declaracin de la excepcin

-- llamado a la excepcin

Finalmente, cabe destacar la existencia de la excepcin OTHERS, que simboliza cualquier condicin de excepcin que no ha sido declarada. Se utiliza comnmente al final del bloque de excepciones para absorber cualquier tipo de error que no ha sido previsto por el programador. En ese caso, es comn observar la sentencia ROLLBACK en el grupo de sentencias de la excepcin o alguna de las funciones SQLCODE SQLERRM, que se detallan a continuacin.

57

GESTIN DE BASES DE DATOS


Uso de SQLCODE y SQLERRM
Al manejar una excepcin es posible apoyarse con las funciones predefinidas SQLCode y SQLErrm para aclarar al usuario la situacin de error acontecida. Sqlcode siempre retornar el nmero del error de Oracle y un 0 (cero) en caso exitoso al ejecutarse una sentencia SQL. Por otra parte, Sqlerrm retornar el correspondiente mensaje de error para la situacin ocurrida. Tambin es posible entregarle a la funcin SQLERRM un nmero negativo que represente un error de Oracle y sta devolver el mensaje asociado. Estas funciones son muy tiles cuando se utilizan en el bloque de excepciones, para aclarar el significado de la excepcin OTHERS, cuando sta ocurre. Estas funciones no pueden ser utilizadas directamente en una sentencia SQL, pero s se puede asignar su valor a alguna variable de programa y luego usar esta ltima en alguna sentencia. Ejemplo:
DECLARE err_num NUMBER; err_msg VARCHAR2(100); BEGIN EXCEPTION WHEN OTHERS THEN err_num := SQLCODE; err_msg := SUBSTR(SQLERRM, 1, 100); INSERT INTO errores VALUES(err_num, err_msg); END;

Ejemplo: /* HACER UN PROGRAMA QUE DESPLIEGUE POR PANTALLA EL CALCULO DEL FACTORIAL */
DECLARE NUMERO BINARY_INTEGER:=&X; CONTADOR BINARY_INTEGER; FACTORIAL BINARY_INTEGER; BEGIN FACTORIAL:=1; CONTADOR:=1; WHILE (CONTADOR<=NUMERO) LOOP FACTORIAL:=FACTORIAL*CONTADOR; CONTADOR:=CONTADOR+1; END LOOP; DBMS_OUTPUT.PUT_LINE('EL FACTORIAL DE: '||TO_CHAR(NUMERO)|| 'ES: '||TO_CHAR(FACTORIAL)); END; / .

58

GESTIN DE BASES DE DATOS


UNIDAD II OBJETIVOS DEL CAPITULO Al final de este captulo, Ud. deber ser capaz de: Ingresar y salir de Forms Obtener ayuda en lnea a travs de los asistentes Disear formulario bsicos mediante asistentes Disear formulario avanzados en formato cabecera detalle mediante asistentes Configuracin de los formularios

ACTIVIDADES: 1. Recopilar informacin de programacin utilizando Forms y Report 2. Obtener manuales de referencia de Oracle CRITERIOS DE EVALUACIN: Examen escrito Desarrollo de ejercicios Trabajos individuales

59

GESTIN DE BASES DE DATOS CAPITULO I PROGRAMACION CON FORMS Introduccin a Oracle Forms
Las formas del oracle son una herramienta de desarrollo de aplicaciones de gran alcance para construir sistemas cliente servidor que son portables a una variedad de plataformas GUI y de modo carcter. El Oracle Forms es parte de Developer/2000, un conjunto comprensivo de herramientas de desarrollo de aplicaciones que soporta el completo ciclo vital del desarrollo de aplicaciones. Las aplicaciones construidas con Oracle Forms y las otras herramientas de Developer/2000 son totalmente escalables y son convenientes para el despliegue a todos los niveles de su empresa, en las utilizacin de aplicaciones en pequeos grupos de trabajo, o en proyectos de misin crtica y grandes transacciones que deben apoyar a centenares de usuarios. Las formas del oracle y las otras herramientas Developer/2000 son optimizadas para tomar la ventaja completa de las caractersticas de gran alcance en el servidor Oracle, servidor principal de la gerencia de la base de datos del oracle.

Componentes de Oracle Forms


Cuando usted construye aplicaciones con Oracle Forms, usted usa tres componentes: Oracle Forms Designer (Diseo de Formas) Oracle Forms Generate (Generacin de Formas) Oracle Forms Runform (Ejecucin de Formas)

El designer es una aplicacin del desarrollo de la aplicacin donde usted trabaja con tres tipos de mdulos de las formas de Oracle ( formas, mens, y bibliotecas). El designer incluye un conjunto de las herramientas visuales que permiten que usted cree objetos, fijar sus caractersticas, y escriben el cdigo para sus aplicaciones. El componente Generate se utiliza para generar archivos de la aplicacin y crear los ejecutables. La generacin de un mdulo de la forma compila todos sus objetos del cdigo y crea un archivo tipo FMX.

Mdulos de Oracle Forms


La aplicacin de Oracle Forms incluye tres mdulos:

Forms
Las formas son colecciones de objetos y cdigo, incluyendo ventanas, textos, cajas de chequeo (check boxes), botones, triggers, y procedimientos. Una forma puede incluir varias ventanas separadas.

Mens
Mens son colecciones de objetos de mens (men principal, men pull-down, items del men)

60

GESTIN DE BASES DE DATOS


cdigo de comando del men.

Libreras
Las libreras son colecciones de procedimientos, funciones y paquetes, estos pueden llamarse de otros mdulos. Usted puede integrar formas, mens y mdulos libreras como necesite la construccin de su aplicacin completa. Por ejemplo, usted puede crear un men de la aplicacin definiendo un mdulo del men y despus asocindolo a unas o ms formas. Semejantemente, usted puede asociar los mdulos de la biblioteca a otros mdulos. Los triggers y los procedimientos que usted escribe en esos mdulos pueden entonces llamar procedimientos en la biblioteca asociada. Una aplicacin de Oracle Forms puede tambin incorporar los mdulos de otras herramientas Developer/2000, tales como informes del oracle y grficos. Por ejemplo, un botn en una forma puede invocar un informe construido con informes del oracle. O una visualizacin de la carta generada por Oracle Graphics se puede introducir en una forma.

Objetos y Propiedades
Cuando usted construye aplicaciones con las formas de oracle, mucho de su trabajo de desarrollo implica el crear de objetos y el fijar de sus caractersticas. Por ejemplo, un tem del texto tienen caractersticas tales como anchura, altura, tipo de los datos, etc. Un objeto de ventana tiene caractersticas tales como ttulo, modal, etc. Cuando usted crea un objeto, sus caractersticas se fija automticamente a las configuraciones de valor por defecto. Usted puede fijar caractersticas a los objetos que usted crea. Estas caractersticas al desarrollo de la aplicacin facilita el desarrollo rpido, y reduce la necesidad de escribir cdigo para realizar operaciones estndares tal como: Querys, inserciones, actualizaciones, y borrado Dicin de querys Coordinacin de maestros detalles Controlando navegacin Despliegue de Objetos

Muchas caractersticas del objeto se pueden fijar en el tiempo de ejecucin as como tiempo del diseo.

Acerca de Bloques e Items


Cuando usted crea la interfaz para su aplicacin, usted trabaja con dos tipos de objetos de Forms (bloques y los tems). Los tems son la interfaz que despliegan informacin a los usuarios y permiten que interactuaren con su aplicacin. El Oracle Forms soporta una variedad de tems de interfaz, incluyendo los botones, los rectngulos de chequeo (check boxes), los grupos de radio (radio button), los tems de la lista, los tems del texto, los tems de la visualizacin, los tems de la imagen, los objetos OLE, los tems de Oracle Graphics, y los controles de VBX. Cada tem pertenece a un bloque. Un bloque es un contenedor lgico para los tems. Es tambin un objeto separado, con su propio conjunto de caractersticas. Las caractersticas del bloque se determinan cmo los usuarios que interactan con la interfaz de los tems. Un bloque puede relacionarse directamente con una tabla de la base de datos o a una vista. Esto significa que los tems del texto, check boxes, y otros tems en el bloque se pueden asociar a las columnas especficas en la base bajo del bloque. Por defecto, este lazo permite que los

61

GESTIN DE BASES DE DATOS


operadores pregunten, actualicen, inserten y que supriman registros en la tabla correspondiente. Los bloques son agrupaciones lgicas solamente. Los tems en un bloque se pueden arreglar en cualquier orden en una forma, y se pueden incluso visualizar en diversas ventanas. Una forma puede incluir cualquier nmero de bloques, y un bloque puede incluir cualquier nmero de tems.

Eventos
El Oracle Forms utiliza un modelo de programacin por eventos. Una vez que usted haya definido la estructura y las funciones bsicas de su aplicacin creando objetos y fijando caractersticas, usted puede ampliar y realzar sus funciones del valor por defecto escribiendo cdigo. El cdigo que usted escribe en formas de oracle se escribe en PL/SQL, extensin de lenguaje SQL, el lenguaje de la base de datos PL/SQL y combina las capacidades de la manipulacin de datos y del tratamiento transaccional del SQL con las construcciones encontradas tpicamente en lenguajes de programacin, tales como declaraciones variables y constantes, asignacin, y ramificacin condicional.

Triggers
Un trigger es un bloque del cdigo de PL/SQL que usted asocia a un objeto especfico, y que se ejecuta en respuesta a un acontecimiento especfico. Por ejemplo, para crear un botn del comando, usted trazara el botn en una forma, y despus asocia un trigger en el evento WhenButton-Pressed que ejecuta el cdigo de comando deseado. Como sugiere su nombre, el disparador de When-Button-Pressed se ejecuta, siempre que se presione el botn. Las formas de oracle proporcionan una variedad rica de acontecimientos que usted pueda responder con triggers. Junto con una interfaz estndar los acontecimientos tales como hacer clic en un botn o el rectngulo de chequeo, Oracle Forms tambin tiene una variedad de acontecimientos de proceso internos. Una vez que usted entienda estas reglas, puede escribir triggers controlando virtualmente cualquier aspecto del comportamiento de su aplicacin.

Subprogramas
Para hacer la escritura de cdigo ms fcil, las formas de oracle incluyen cerca de 150 procedimientos incorporados y funciones que realizan una variedad de tareas estndares de la aplicacin, incluyendo la navegacin, commit de procesos, y conseguir caractersticas de un objeto. Adems de los subprogramas incorporados de las formas de oracle, usted puede tambin hacer sus propios procedimientos, funciones, o conjuntos usando -user-named. Estos objetos, conocidos colectivamente como unidades del programa, se pueden definir en formas, mens, o mdulos de la biblioteca. Una vez que usted haya definido un procedimiento o una funcin, usted puede llamarla a triggers, comandos del tem del men, y otras unidades del programa.

Formatos para los mdulos


La forma, el men, y libreras que usted crea en el diseador son almacenados en formato binario, se pueden grabar a archivos o a la base de datos, y es portable a travs de plataformas. Cuando usted genera un modulo en binario, Oracle Forms crea una plataforma especificando un runtime. Usted puede tambin utilizar el componente Generate para generar un fichero de texto que sea portable a travs de plataformas.

62

GESTIN DE BASES DE DATOS


La siguiente tabla muestra la extensin de los archivos para cada tipo de modulo;

Modulo Form Menu Library

Binary (Diseo) . FMB .MMB . PLL

Text . FMT . MMT . PLD

Ejecutable Runfile .FMX . MMX . PLX

Por defecto las extensiones indican el tipo de archivo y formato de almacenamiento: . FMB . FMT . FMX .MMB .MMT .MMX .PLL .PLD .PLX Form Modulo Binaries Form Modulo Text Form Modulo Ejecutable Men Modulo Binario Men Modulo Texto Men Modulo Ejecutable PL/SQL Library Modulo Binario PL/SQL Library Modulo Texto PL/SQL Library Modulo Ejecutable (contains no source)

Cuando usted crea una aplicacin con mltiples mdulos, usted debe entregar todos los archivos. FMX. MMX. , And PLX requeridos para ejecutar la aplicacin (runtime)

Canvas y ventanas
Un canvas es la base sobre la que se sita el texto plano y los elementos. Cada elemento hace referencia a un nico canvas de su hoja de propiedades. Los elementos de un bloque de datos se pueden dividir entre diferentes canvas. Un canvas no es un elemento de interfaz autnomo. Para verlo a l y sus elementos es necesario mostrarlo en una ventana, un rea rectangular rodeada por un marco y mantenida por la plataforma GUI. La parte del canvas que se puede ver a travs de la ventana es la vista. La ventana puede tener barras de desplazamiento que permiten moverse a travs del canvas para ver diferentes vistas. Hay cinco tipos de canvas: Contenido: muestra el contenido bsico de una ventana. De fichas: muestra el contenido bsico de una ventana en una serie de canvas superpuestos con solapas etiquetadas. Apilado: se muestra sobre otros canvas para mostrar informacin condicional o independiente; se puede elegir entre mostrar el canvas apilado cuando se muestre su ventana o dejarlo invisible hasta que se necesite. Barra de herramientas vertical: contiene iconos de herramientas que se muestran en una barra de herramientas vertical situada en el lado izquierdo de una ventana; la ventana especifica por el nombre el canvas que se va a utilizar en su barra de herramientas.

63

GESTIN DE BASES DE DATOS


Barra de herramientas horizontal: contiene iconos de herramientas que se muestran en una barra de herramientas horizontal situada en parte superior de una ventana; la ventana especifica por el nombre el canvas que se va a utilizar en su barra de herramientas.

Hay dos tipos de ventanas: Documento: una ventana que visualiza un elemento documento de la aplicacin. Cuadro de dilogo: una ventana que muestra opciones u otras formas de controlar la operativa de la aplicacin.

Mens emergentes, avisos, editores, etc...


Un men emergente es un men flotante, que emerge cuando se pulsa con el botn derecho del ratn en un canvas o en un elemento. Un aviso es un cuadro de dilogo especial que muestra un mensaje con un icono y hasta tres botones, como OK y Cancel, Yes y No, etc. Existen tres tipos de avisos: de parada, de precaucin y de informacin. Un editor es un cuadro de dilogo con un editor de texto sencillo que permite la introduccin de lneas de texto en un elemento texto. El elemento editor permite especificar el tamao de la ventana, los atributos visuales, el ttulo del editor y otras propiedades de la ventana. Esto permite la creacin de editores con apariencias diferentes para diferentes campos de texto. Un grupo de registros es una estructura de datos especial parecida a una tabla con filas y columnas. Un grupo de registros puede ser un grupo de registros procedentes de una consulta o un grupo de registros estticos. Los grupos de registros se pueden utilizar en LOV, en parmetros de datos que pasan registros a informes o grficos, o como estructuras de datos PL/SQL. Un LOV (lista de valores) es un cuadro de dilogo especial que muestra un grupo de registros, permitiendo elegir una fila del grupo, devolviendo un nico valor. Un LOV se utiliza como una forma de elegir un conjunto especfico de valores

Elementos programables
Los elementos programables se utilizan para estructurar programas. Estos elementos son igualmente aplicables a mdulos de formularios y de mens.

Diseando Formularios con Oracle Developer Form Builder


-

Formulario Empleado. Procedimiento para crear el formulario: Crear el bloque que muestra en la tabla. Crear como detalle el bloque asociado a cada campo Aadir una lista desplegable que permita seleccionar una cualidad de la misma Organizar el formulario Ejecutar y almacenar la aplicacin Creacin del bloque de la tabla

Para elaborar este formulario debemos seguir los siguientes pasos: Activar Asistente de Bloques de Datos Avanzar hasta visualizar

64

GESTIN DE BASES DE DATOS


Pulsar Siguiente

Pulsar Examinar Introducir el Usuario y Clave Visualizar las tablas y vistas y seleccionar los campos

Pulsar Terminar para entrar en el Asistente de Diseo Avanzar hasta Visualizar los campos a utilizar y pulsar Terminar Ya tenemos nuestro primer bloque!

65

GESTIN DE BASES DE DATOS

Para la creacin de otro formulario dentro del mismo ya creado se debe seguir: Marcar el bloque de la tabla Para crear otro bloque pulsar Aceptar la utilizacin del Asistente de Bloques de Datos Seleccionar la tabla DEPT y utilizar todos sus campos. Avanzar y pulsar Crear Relacin Seleccionar la tabla Persona como maestro Continuar con el Asistente de Diseo Visualizar slo los campos necesarios para el formulario Elegir el estilo Tabular para presentar los resultados Despus poner un nombre en el Ttulo del Marco Visualizar los registros y activar Visualizar Barra de Desplazamiento Pulsar Terminar Ya tenemos el esqueleto de nuestro primer formulario! Lista de ESTADO

Vamos a crear una lista dinmica para seleccionar el estado, generada a partir de la tabla EMP Pulsar sobre EMP, botn derecho y abrir la Paleta de Propiedades con los atributos del elemento ESTADO Establecer los atributos Tipo de Elemento, Estilo de la Lista y Correspondencia de Otros valores como muestra la figura.

66

GESTIN DE BASES DE DATOS


Pulsar en el valor de Elementos de la Lista y establecer al menos un elemento para la lista que se encuentre en la tabla EMP

Para dotarla de carcter dinmico necesitamos: Escribir una consulta que obtenga los valores de la tabla EMP Escribir un procedimiento PL/SQL que la rellene con los datos de la tabla EMP Crear un disparador que actualice su contenido en el momento oportuno Para crear esta consulta, que es un Grupo de Registros, realizamos:

Marcar Grupo de Registros y pulsar Introducir Llamarlo EMP

Dada la generalidad de este proceso vamos a crear un procedimiento reutilizable que vamos a incorporar a nuestra ejemplo para posteriores usos Creamos una tabla.

Marcamos Bibliotecas PL/SQL y pulsamos Marcamos Unidades de Programa y pulsamos Introducimos

En la ventana de edicin introducimos el siguiente cdigo: Compilamos el mdulo Salvamos el formulario EMP Marcamos EMP y la compilamos (Programa | Compilar Seleccin)

Marcamos EMP Asociadas bajo el Modulo1 y pulsamos

seleccionando EMP.

Vamos a utilizar un disparador WHEN-NEW-FORM-INSTANCE para determinar que la lista de valores se actualice con los valores de la tabla EMP.

67

GESTIN DE BASES DE DATOS

Marcar Disparadores pulsar Seleccionar el mencionado disparador En la ventana introducir el cdigo: EXECUTE_QUERY; Compilar y cerrar Ejecutar el formato, comprobar los resultados y almacenar como empleado si todo ha estado conforme

Realizar el formulario correspondiente (llamarlo empleado.fmb) de acuerdo con el aspecto de la figura y los siguientes requisitos: Debe incluir todos los campos de la tabla correspondiente Debe tener forma tabular (varias transacciones a la vez) Una lista esttica sobre Tipo Operacin (Estado) Una lista dinmica sobre el campo con datos de la tabla EMP

Los elementos que conforman en este formulario son: Cdigo, Nombre, Cargo, Jefe, Fecha, Salario, Comisin, Departamento de la Tabla EMP

68

GESTIN DE BASES DE DATOS


Los botones o disparadores a ser creados son: Inicio, Siguiente, Anterior, Ultimo, Nuevo, Eliminar, Modificar, Grabar, Cancelar, Salir.

Crear Disparador de Nueva Instancia de Formulario.execute_query;

Crear Botn Inicio.-

declare resultado number; begin if :system.last_record = 'TRUE' then resultado:=show_alert('ALERT_INICIO_REG'); Message('Error... Inicio de Archivo'); else first_record; end if; end;

Modo de Ejecucin de Formulario Cliente / Servidor

69

GESTIN DE BASES DE DATOS

Crear Botn

Anterior.-

declare resultado number; begin if :system.cursor_record ='1'then resultado:=show_alert('ALERT_INICIO_REG'); Message('Error... Inicio de Archivo'); else previous_record; end if; end;

Modo de Ejecucin de Formulario Cliente / Servidor

70

GESTIN DE BASES DE DATOS

Crear Botn Siguiente.-

declare resultado number; begin if :system.last_record = 'TRUE' then resultado:=show_alert('ALERT_FIN_REG'); Message('Error... Fin de Archivo'); else next_record; end if; end;

Modo de Ejecucin de Formulario Cliente / Servidor

71

GESTIN DE BASES DE DATOS

Crear Botn

ltimo.-

declare resultado number; begin if :system.last_record = 'TRUE' then resultado:=show_alert('ALERT_FIN_REG'); Message('Error... Fin de Archivo'); else last_record; end if; end;

Modo de Ejecucin de Formulario Cliente / Servidor

72

GESTIN DE BASES DE DATOS

Crear Botn Nuevo.-

create_record; SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY

('EMPNO',enabled, property_true); ('HIREDATE',enabled, property_true); ('ENAME',enabled, property_true); ('SAL',enabled, property_true); ('JOB',enabled, property_true); ('COMM',enabled, property_true); ('MGR',enabled, property_true); ('DEPTNO',enabled, property_true); ('GRABAR',enabled, property_true); ('CANCELAR',enabled, property_true);

Crear Botn Eliminar.-

declare resultado number;

73

GESTIN DE BASES DE DATOS


begin resultado:=show_alert('DEL_RECORD'); if resultado='1' then delete_record; commit_form; end if; end;

Crear Botn Modificar.-

if:system.form_status='CHANGED' then commit_form; end if; SET_ITEM_PROPERTY ('EMPNO',enabled, property_true); SET_ITEM_PROPERTY ('HIREDATE',enabled, property_true); SET_ITEM_PROPERTY ('ENAME',enabled, property_true); SET_ITEM_PROPERTY ('SAL',enabled, property_true); SET_ITEM_PROPERTY ('JOB',enabled, property_true); SET_ITEM_PROPERTY ('COMM',enabled, property_true); SET_ITEM_PROPERTY ('MGR',enabled, property_true); SET_ITEM_PROPERTY ('DEPTNO',enabled, property_true); SET_ITEM_PROPERTY ('GRABAR',enabled, property_true); SET_ITEM_PROPERTY ('CANCELAR',enabled, property_true); SET_ITEM_PROPERTY ('ELIMINAR',enabled, property_false); SET_ITEM_PROPERTY ('NUEVO',enabled, property_false);

74

GESTIN DE BASES DE DATOS

Crear Botn Grabar.-

commit_form; SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY SET_ITEM_PROPERTY

('EMPNO',enabled, property_false); ('HIREDATE',enabled, property_false); ('ENAME',enabled, property_false); ('SAL',enabled, property_false); ('JOB',enabled, property_false); ('COMM',enabled, property_false); ('MGR',enabled, property_false); ('DEPTNO',enabled, property_false); ('GRABAR',enabled, property_false); ('NUEVO',enabled, property_true); ('CANCELAR',enabled, property_false); ('ELIMINAR',enabled, property_true);

Crear Botn Cancelar.-

75

GESTIN DE BASES DE DATOS

rollback_form; SET_ITEM_PROPERTY ('GRABAR',visible, property_false); SET_ITEM_PROPERTY ('CANCELAR',visible, property_false);

Crear Botn Salir.-

if :System.form_status = 'CHANGED' then commit_form; end if; exit_form(NO_VALIDATE);

Crear Botn Nuevo Departamento.declare resultado boolean; begin resultado:=show_lov('lov32'); end;

Paleta de Propiedades (Lista de Valores).General Nombre: LOV32


Funcional

76

GESTIN DE BASES DE DATOS


Ttulo: Lista de Departamentos Tipo de Lista: Grupo de Registros Grupo de Registros: LOV32 Propiedades de Correspondencia de Columnas:

77

Paleta de Propiedades (Grupo de Registros).General Nombre: LOV32 Funcional Tipo de Grupo de Registros: Consulta Consulta del Grupo de Registros: SELECT ALL DEPTDEPTNO, DEPT.DENAME FROM DEPT

Tamao de Bsqueda del Grupo de Registros: 10

Alertas.Una alerta es una ventana que puede desplegar informacin al usuario (errores, advertencias o mensajes), la cual es presentada en respuesta a un evento

Se puede especificar el estilo alerta: parar, precaucin, o nota. En las plataformas de GUI, el estilo alerta determina qu icono del bitmap se despliega en la alarma.

Crear Alerta de Eliminacin de Registro.General Nombre: DEL_RECORD Comentarios: Desea eliminar registro...! Funcional Ttulo: Advertencia Mensaje: Seor operador desea eliminar el registro... Estilo de Alerta: Precaucin Etiqueta de Botn 1: Aceptar

Crear Alerta de Fin de Registro.General Nombre: ALERT_FIN_REG Comentarios: Error Fin del Registro...! Funcional Ttulo: Advertencia Mensaje: Seor usuario se encuentra en el final del registro... Estilo de Alerta: Precaucin Etiqueta de Botn 1: Aceptar

Crear Alerta de Inicio de Registro.-

General Nombre: ALERT_INICIO_REG Comentarios: Error Inicio del Registro...! Funcional Ttulo: Advertencia Mensaje: Seor usuario se encuentra al inicio del registro... Estilo de Alerta: Precaucin Etiqueta de Botn 1: Aceptar

Teclas de Acceso Rpido.- Dentro de la ejecucin de FORMS se pueden visualizar varias funciones que pueden ser de gran ayuda al usuario esto se lo puede realizar presionando CONTROL F1

Para cambiar el nombre de la ventana se deber dar clic derecho paleta de Propiedades y en la opcin ventana dar doble clic para colocar o cambiar el nombre a llamarse para que luego al ejecutarlo aparezca este nombre.

Crear Botones de Radio.Cuando usted crea botones de radio, usted inserta un nuevo grupo de radio en un bloque o usted modifica un artculo existente convirtiendo su tipo para Transmitir por radio el Grupo. Despus de crear un grupo de radio, usted puede crear las etiquetas de botn de radio, especifique valores de botn de radio, las propiedades de despliegue de juego, y as sucesivamente.

Crear Elemento de Botn de Radio Sexo.General Nombre: SEXO Tipo de elemento: Grupo de Botones Datos Tipo de Dato: CHAR Longitud Mxima: 1 Base de Datos Nombre de la Columna: SEXO

Crear Botn de Radio Masculino.General Nombre: MASCULINO Funcional Activado: Si Etiqueta: MASCULINO Valor de Botn de Radio: M

Crear Botn de Radio Femenino.General Nombre: FEMENINO Funcional Activado: Si Etiqueta: FEMENINO Valor de Botn de Radio: F

Realizar el formulario correspondiente (llamarlo detalle.fmb) de acuerdo con el aspecto de la figura y los siguientes requisitos: Debe incluir todos los campos de la tabla correspondiente tanto para Departamento como Empleado. Debe tener forma tabular (varias transacciones a la vez) Una lista esttica sobre Tipo Operacin (Estado) Una lista dinmica sobre el campo con datos de la tabla DETALLE (EMP y DEPT)

Los elementos que conforman en este formulario son: Cdigo de Departamento, Nombre del Departamento, Ubicacin del Departamento de la Tabla DEPT, y; Cdigo, Nombre, Cargo, Jefe de Departamento, Fecha de Ingreso, Salario, Comisin, Sueldo Total de la Tabla EMP. As como un total para cada uno calculado con la suma para la tabla DEPT y EMP. Los botones o disparadores y los elementos a ser creados son: Crear Departamento, Eliminar Departamento, Imprimir, Departamento Anterior, Departamento Siguiente, Grabar y Terminar.

Crear un Disparador Cabecera Detalle.BEGIN Clear_All_Master_Details; END;

Crear un Disparador.Tipo: Disparador Objeto: NIVEL DE FORM Nombre: WHEN-NEW-FORM-INSTANCE execute_query; go_item('SIGUIENTE'); SET_ITEM_PROPERTY('GRABAR',ENABLED,PROPERTY_FALSE);

Crear un Disparador en Tabla Departamento.Tipo: Disparador Objeto: DEPT NIVEL DE BLOQUE DE DATOS Nombre: WHEN-NEW-FORM-INSTANCE -- Begin default relation declare section DECLARE recstat VARCHAR2(20) := :System.record_status; startitm VARCHAR2(61) := :System.cursor_item; rel_id Relation; -- End default relation declare section -- Begin default relation program section BEGIN IF ( recstat = 'NEW' or recstat = 'INSERT' ) THEN RETURN; END IF; -- Begin EMP detail program section IF ( (:DEPT.DEPTNO is not null) ) THEN

rel_id := Find_Relation('DEPT.DEPT_EMP'); Query_Master_Details(rel_id, 'EMP'); END IF; -- End EMP detail program section IF ( :System.cursor_item <> startitm ) THEN Go_Item(startitm); Check_Package_Failure; END IF; END; -- End default relation program section

Crear un Disparador en la Tabla Departamento


Tipo: Disparador Objeto: DEPT NIVEL DE BLOQUE DE DATOS Nombre: WHEN-NEW-FORM-INSTANCE -- Begin default relation declare section DECLARE Dummy_Define CHAR(1); -- Begin EMP detail declare section CURSOR EMP_cur IS SELECT 1 FROM EMP E WHERE E.DEPTNO = :DEPT.DEPTNO; -- End EMP detail declare section -- End default relation declare section -- Begin default relation program section BEGIN -- Begin EMP detail program section OPEN EMP_cur; FETCH EMP_cur INTO Dummy_Define; IF ( EMP_cur%found ) THEN Message('No puede borrar registro maestro cuando existen registros detalle coincidentes.'); CLOSE EMP_cur; RAISE Form_Trigger_Failure; END IF; CLOSE EMP_cur; -- End EMP detail program section END;

-- End default relation program section

Crear Botn Crear Departamento.SET_ITEM_PROPERTY('GUARDAR',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('ELIMINAR',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('ANTERIOR',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('SIGUIENTE',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('IMPRIMIR',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('DEPT.DEPTNO',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('DEPT.DNAME',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('DEPT.LOC',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('EMP.EMPNO',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('EMP.ENAME',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('EMP.JOB',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('EMP.MGR',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('EMP.HIREDATE',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('EMP.SAL',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('EMP.COMM',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('EMP.JEFE',ENABLED,PROPERTY_TRUE); CREATE_RECORD; GO_ITEM('DEPT.DEPTNO'); SET_ITEM_PROPERTY('DEPT.NUEVO',ENABLED,PROPERTY_FALSE);

Crear

Botn

Eliminar

Departamento.-

DECLARE VALOR NUMBER; BEGIN VALOR:=SHOW_ALERT('ELIMINAR'); IF VALOR=ALERT_BUTTON1 THEN DELETE_RECORD; COMMIT_FORM; END IF; END;

Crear Botn Departamento Anterior.-

declare valor number; begin if :system.cursor_record='1' then valor:=show_alert('inicio'); else previous_record; end if; end; SET_ITEM_PROPERTY('DEPT.GUARDAR',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('DEPT.DEPTNO',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('DEPT.DNAME',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('DEPT.LOC',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('EMP.EMPNO',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('EMP.ENAME',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('EMP.JOB',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('EMP.MGR',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('EMP.HIREDATE',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('EMP.SAL',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('EMP.COMM',ENABLED,PROPERTY_FALSE); SET_ITEM_PROPERTY('EMP.JEFE',ENABLED,PROPERTY_FALSE);

Crear Botn Departamento Siguiente.-

declare valor number; begin if :System.Last_Record='TRUE' then valor:=show_alert('fin'); else next_record; end if; end;

Crear Botn Guardar


DECLARE resultado number; BEGIN IF :System.Form_Status = 'CHANGED' THEN Commit_Form; END IF; END; SET_ITEM_PROPERTY('NUEVO',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('ELIMINAR',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('IMPRIMIR',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('ANTERIOR',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('SIGUIENTE',ENABLED,PROPERTY_TRUE); SET_ITEM_PROPERTY('GUARDAR',ENABLED,PROPERTY_FALSE); GO_ITEM('ANTERIOR');

Crear Botn Terminar.exit_form(no_validate);

Crear Alerta de Eliminar Departamento.General Nombre: ELIMINAR Funcional Ttulo: Advertencia Mensaje: Seor usuario esta seguro que desea eliminar el registro... Estilo de Alerta: Precaucin Etiqueta de Botn 1: Si Etiqueta de Botn 2: No

Crear Alerta de Grabar.General Nombre: GUARDAR Funcional Ttulo: Advertencia

Mensaje: Seor usuario desea grabar el registro...


Estilo de Alerta: Precaucin Etiqueta de Botn 1: Si Etiqueta de Botn 2: No

Crear Alerta de Inicio de Registro.General Nombre: INICIO Funcional Ttulo: Advertencia Mensaje: Seor usuario usted ha llegado al inicio del registro... Estilo de Alerta: Precaucin Etiqueta de Botn 1: Si Etiqueta de Botn 2: No

Crear Alerta de Fin de Registro.General Nombre: FIN Funcional Ttulo: Advertencia Mensaje: Seor usuario usted ha llegado al fin del registro... Estilo de Alerta: Precaucin Etiqueta de Botn 1: Si Etiqueta de Botn 2: No

Propiedades de la Paleta de Propiedades en el Lienzo Cabecera Detalle.General Nombre: PRINCIPAL Tipo de Elemento: Contenido Funcional Abrir al entrar: No Men Desplegable: Null Fsica Visible: Si Ventana: Reporte Posicin x de la puerta de Vista en el Lienzo: 0 Posicin y de la puerta de Vista en el Lienzo: 0 Ancho: 638 Altura: 398 Bisel: Hundido

Propiedades de la Paleta de Propiedades en Ventana Cabecera Detalle.General Nombre: PRINCIPAL Tipo de Elemento: Contenido Funcional Estilo de Ventana: Documento Modal: No Ocultar al salir: No Fsica Posicin x: 0 Posicin y: 0 Ancho: 637 Altura: 398 Bisel: Hundido Para cambiar el nombre de la ventana se deber dar clic derecho paleta de Propiedades y en la opcin ventana dar doble clic para colocar o cambiar el nombre a llamarse para que luego al ejecutarlo aparezca este nombre.

Crear Disparador en MGR.Tipo: Disparador Objeto: NIVEL DE FORM MGR Nombre: POST-CHANGE begin select ename into :jefe from emp where :mgr=empno; exception when no_data_found then message ('jefe no existe'); raise form_trigger_failure; when too_many_rows then message ('existen demasiados jefes'); raise form_trigger_failure; when others then raise form_trigger_failure; end;

Propiedades de la Paleta de Propiedades en el Campo Sueldo.General Nombre: SAL Tipo de Elemento: Elemento de texto Funcional Activado: Si Justificacin: Derecha Datos Tipo de Dato: Number Longitud Mxima: 9 Valor Inicial: $.00 Mscara de Formato: $999,999.99

Propiedades de la Paleta de Propiedades en el Campo Comisin.General Nombre: COMM Tipo de Elemento: Elemento de texto Funcional Activado: Si Justificacin: Derecha Datos Tipo de Dato: Number Longitud Mxima: 9 Valor Inicial: $.00 Mscara de Formato: $999,999.99

Propiedades de la Paleta de Propiedades en el Campo Sueldo Total.General Nombre: TOTAL Tipo de Elemento: Elemento de texto Funcional Activado: Si Justificacin: Derecha Datos Tipo de Dato: Number Longitud Mxima: 9 Valor Inicial: $.00 Mscara de Formato: $999,999.99 Clculo Modo de Clculo: Frmula Frmula: :sal + nvl(:comm, 0)

Propiedades de la Paleta de Propiedades en el Campo Total Sueldos.-

General Nombre: SUELDOS Tipo de Elemento: Elemento de texto Funcional Activado: Si Justificacin: Derecha Datos Tipo de Dato: Number Longitud Mxima: 9 Valor Inicial: $.00 Mscara de Formato: $999,999.99 Clculo Modo de Clculo: Total Funcin a Totalizar: Sum Bloque de Total: EMP Elemento de Total: SAL

Propiedades de la Paleta de Propiedades en el Campo Total Sueldos.General Nombre: SUELDOS Tipo de Elemento: Elemento de texto Funcional Activado: Si Justificacin: Derecha Datos Tipo de Dato: Number Longitud Mxima: 9 Valor Inicial: 0 Mscara de Formato: 999,999 Clculo Modo de Clculo: Total Funcin a Totalizar: Recuento Bloque de Total: EMP Elemento de Total: EMPNO

Crear Lienzo Reporte para Botn Imprimir.-

Para cambiar el nombre de la ventana se deber dar clic derecho paleta de Propiedades y en la opcin ventana dar doble clic para colocar o cambiar el nombre a llamarse para que luego al ejecutarlo aparezca este nombre.

Propiedades de la Paleta de Propiedades en el Lienzo Reporte.-

General Nombre: REPORTE Tipo de Elemento: Contenido Funcional Abrir al entrar: No Men Desplegable: Null Fsica Visible: Si Ventana: Reporte Posicin x de la puerta de Vista en el Lienzo: 0 Posicin y de la puerta de Vista en el Lienzo: 0 Ancho: 261 Altura: 167 Bisel: Resaltado

Propiedades de la Paleta de Propiedades en Ventana Reporte.General Nombre: REPORTE Tipo de Elemento: Contenido Funcional Estilo de Ventana: Documento Modal: No Ocultar al salir: No Fsica Posicin x: 200 Posicin y: 160 Ancho: 261 Altura: 166 Bisel: Hundido

Crear Elemento de Lista.General Nombre: Destino Tipo de Elemento: Elemento de Lista Funcional Activado: Si Elemento de lista: Impresora: printer Archivos pdf: pdf Archivos html: html Pantalla: screen Correo: mail Estilo de la lista: Lista desplegable Los Elementos en Lista y Lista

el grupo de propiedad de Lista incluyen el Artculo de la Artculo Valor propiedades.

Para que Liste el Artculo.Especifica la etiqueta del texto para cada elemento en un artculo de la lista. Como se realizo anteriormente

Crear Botn Imprimir.-

:destino:= 'printer'; go_item('destino');

Crear Botn Procesar.-

DECLARE PL_ID PARAMLIST; ARCHIVO VARCHAR(255); BEGIN IF ID_NULL(GET_PARAMETER_LIST('PARAMETROS'))= FALSE THEN DESTROY_PARAMETER_LIST('PARAMETROS'); END IF; PL_ID:= CREATE_PARAMETER_LIST('PARAMETROS'); ADD_PARAMETER(PL_ID,'PARANFORM',TEXT_PARAMETER,'NO'); ADD_PARAMETER(PL_ID,'DPTO',TEXT_PARAMETER,:DEPT.DEPTNO); IF:DESTINO <>'SCREEN' THEN IF:DESTINO='PDF' THEN ADD_PARAMETER(PL_ID,'DESFORMAT',TEXT_PARAMETER,:DESTINO);

ADD_PARAMETER(PL_ID,'DESTYPE',TEXT_PARAMETER,'FILE'); ARCHIVO:='C:\FORMS\ARCHIVO.PDF'; ELSIF:DESTINO='HTML' THEN ADD_PARAMETER(PL_ID,'DESFORMAT',TEXT_PARAMETER,:DESTINO); ADD_PARAMETER(PL_ID,'DESTYPE',TEXT_PARAMETER,'FILE'); ARCHIVO:='C:\FORMS\ARCHIVO.HTML'; ELSIF:DESTINO='MAIL' THEN ADD_PARAMETER(PL_ID,'DESFORMAT',TEXT_PARAMETER,:DESTINO); ARCHIVO:='email@hotmail.com'; ELSIF:DESTINO='PRINTER' THEN ADD_PARAMETER(PL_ID,'DESTYPE',TEXT_PARAMETER,:DESTINO); RUN_PRODUCT(REPORTS,'D:\REPORTE\REPORTE_DETALLE.RDF',SYNCHRONOUS,RUNTIME, FILESYSTEM,PL_ID,NULL); ARCHIVO:='HP LASERJET 6L'; END IF; END IF; ADD_PARAMETER(PL_ID,'DESNAME',TEXT_PARAMETER,:DESTINO); RUN_PRODUCT(REPORTS,'D:\REPORTE\REPORTE_DETALLE.RDF',SYNCHRONOUS,RUNTIME, FILESYSTEM,PL_ID,NULL); END;

Crear Botn Cancelar.-

rollback_form;

Oracle Developer Report Builder

El componente Reports de Developer es la parte del entorno de desarrollo con la que se realizan los mdulos de informes. En este entorno se puede hacer referencia a elementos de consultas externas, y se pueden configurar y almacenar elementos de depuracin. El Report Builder tambin incluye bibliotecas y elementos de base de datos. Un mdulo de informes tiene una estructura bastante complicada. Los componentes bsicos de un informe son modelo de datos, su formulario de parmetros, sus disparadores de informes y su composicin. El modelo de datos de informe es la estructura de datos de datos y sus diferentes representaciones en el informe. El modelo de datos se crea en un editor grfico especial. Los elementos parmetro son variables a las que se puede hacer referencia desde el cdigo PL / SQL y cualquier otra cosa que acepte valores de datos como entrada. Los parmetros del sistema son los parmetros que Reports define automticamente; los parmetros definidos por el usuario son los que define uno mismo. Para la asignacin de valores a los parmetros en tiempo de ejecucin se tiene un formulario por defecto o se puede crear uno completamente diferente como un elemento formulario de parmetros. El programa en tiempo de ejecucin de Reports ejecuta este formulario cuando se ejecuta el informe para incitar al usuario a asignar valores a los parmetros especificados. Una consulta es una sentencia SQL que devuelve los valores de los datos que son base del informe. La consulta se puede incorporar en un informe, o se puede utilizar un elemento de consulta externa; ste es simplemente texto SQL en un archivo independiente que se puede compartir entre aplicaciones. El grupo identifica los registros que devuelven las consultas en el informe como un grupo repetido de registros, existiendo una jerarqua de grupos. Las columnas de base de datos son las columnas de la lista SELECT de la consulta. Las columnas de frmulas son columnas especiales que se procesan utilizando bloques PL / SQL. Las columnas resumen son columnas especiales que acumulan informacin resumida de mltiples registros en el formulario, tales como subtotales o importes totales. Las columnas de almacenamiento son columnas que se definen para ser rellenadas con un disparador, una frmula , en vez de a partir de datos o resmenes estndar. Por ejemplo se pueden derivar campos especiales de informe que sealen la regin con las ventas ms altas entre un conjunto de filas regionales. Los enlaces de datos son enlaces utilizados en informe maestro-detallados para enlazar un grupo de filas a otro grupo de filas. La composicin del informe es la estructura grfica del informe. Cada informe tiene una cabecera, un pie de formulario y un cuerpo intercalado entre ellos. Existen diversas variedades de composiciones de informes: tabular, maestro-detallado, formulario, carta, etiqueta de correo, etc. Los disparadores de informes son bloques de cdigo PL/SQL que se ejecutan en puntos bien definidos: antes del informe, despus del informe, entre pginas, antes del formulario de parmetros.

CREACION DE REPORTES

El informe agrupar por personas las entradas y mostrar los subtotales de las mismas: Iniciar Report Builder y aceptar el uso del Asistente de Informes

En Ttulo ponemos: REPORTE DE EMPLEADOS POR DEPARTAMENTO Seleccionamos el estilo Agrupar a la Izquierda puesto que queremos agrupar por empleado. Pulsar Siguiente

En esta pantalla aprovechamos para conectarnos (Usuario, Clave)

Escribimos la consulta: SELECT ENAME, JOB, SAL, DNAME FROM EMP, DEPT WHERE (EMP.DEPTNO = DEPT.DEPTNO)

La siguiente pantalla solicita los campos sobre los que agrupar el informe.

Introducir los campos. Pulsar Siguiente En esta pantalla se solicita los campos a visualizar en el informe. Introducirlos todos como muestra la figura

Pulsar Siguiente. La pantalla de los totales solicita los campos a agregar. Nosotros queremos obtener las sumas de los totales. Seleccionamos Total y pulsamos el botn Suma

Pulsar Siguiente dos veces. En la pantalla de plantillas seleccionamos, por ejemplo, Corporate1 Pulsar Terminar para obtener en el Visor Activo la vista preliminar del informe generado. Es preciso retocarlo un poco para mejorar la presentacin

Mediante la utilizacin del Live Previewer: Dimensionar los campos para que ocupen menos espacio Cambiar el formato y la etiqueta asociada. Salvar como reporte1.rdf

VISOR ACTIVO

MODELO DE DATOS

MODELO DE DISEO

Se podr visualizar por un instante el progreso del informe que se realiza el cliente servidor.

Para crear un parmetro del usuario:

En el Navegador de Objetos, extienda el nodo Modelo de Datos, entonces pulse el botn el nodo del Parmetros de Usuario. Clic en el toolbar.

2 3
4 5 6

Doble - clic (el icono de propiedades) para el nuevo parmetro para desplegar la Paleta de Propiedades. Bajo el nodo de Informacin General, reemplace la propiedad del Nombre con el nombre del parmetro deseado. Bajo el nodo del Parmetro, ponga el Valor Inicial y Lista de propiedades de Valores, si requiri. Validar el valor del parmetro al runtime, doble-pulse el botn el Aprobacin Gatillo propiedad valor campo. En el Editor de PL/SQL, defina el PL/SQL para ser activado al runtime.

Podremos observar el disparador de validacin para visualizar el parmetro que se crea por defecto.

Sintaxis en PL / SQL function DPTOValidTrigger return boolean is begin return (TRUE); end;

Sentencia de Consulta SQL para el parmetro DPTO SELECT ALL EMP.JOB, EMP.ENAME, EMP.SAL, DEPT.DEPTNO FROM DEPT, EMP WHERE (EMP.DEPTNO = DEPT.DEPTNO) AND DEPT.DEPTNO=:DPTO

para visualizar slo el contenido del departamento especfico debemos sealar el campo

Oracle Developer Report Compiler

Aqu nos presenta un Background de la ejecucin del reporte del ejemplo cabecera detalle realizado.

Esta es la presentacin final de un ejemplo cabecera detalle

Oracle Developer Graphics Builder


El componente Graphics de Developer es parte del entorno en el que se desarrollan los mdulos de pantalla. Un mdulo de pantalla puede ser uno o ms grficos que se derivan de datos de base de datos, o pueden contener cualquier combinacin de elementos grficos con o sin referencia a la base de datos. Los mdulos de pantalla se pueden utilizar estrictamente para mostrar datos mediante grficos, como una herramienta de dibujo, o de ambas formas. Como se puede ver en la figura, la estructura de un mdulo de pantalla es sencilla en trminos de elementos.

La composicin contiene elementos grficos de la pantalla en una jerarqua que representa sus relaciones. Tambin relaciona dichos elementos con las columnas de una consulta. Hay diversos tipos de grficos disponibles: columnas, tarta, barras, tabla, lneas, etc...

Una plantilla de grfico es un conjunto de opciones personalizados que permite construir diferentes grficos con un formato idntico, posiblemente en la misma pantalla. Por ejemplo, se podran construir una serie de grficos de tarta que utilicen una plantilla que los haga consistentes n Una consulta, como en un mdulo de informes, es una sentencia SELECT SQL que define un conjunto de datos que se muestran formateados como un grfico. La consulta se construye para que devuelva los datos en el formato exacto que se quiera presentar en el grfico. Por ejemplo el grfico de tarta no resume los datos de las porciones; para hacer esto se deben utilizar las funciones GROUP BY y SUM. Los parmetros, igual que en los informes, son variables del mdulo que se definen y utilizan en el cdigo PL/SQL en cualquier parte dentro del mdulo. A los parmetros se les puede asignar valores en la lnea de rdenes o pasando una lista de parmetros desde otro programa Forms o Reports. Adems de los elementos de pantalla, las pantalla tambin pueden integrar elementos de sonido para crear pantallas completamente multimedia. En Graphics existe un elemento temporizador especial que acta como un tipo de despertador para la pantalla. Se especifica un intervalo de tiempo al final del cual el temporizador ejecuta algn cdigo PL/SQL. Con los temporizadores se pueden realizar efectos especiales.

Comentarios de ndole prctica.Cada elemento tomado por separado, es una poderosa contribucin al desarrollo de aplicaciones. Sin embargo, Developer es ms que nicamente los elementos que comprende. Es un sistema que une todos estos elementos en un todo. No slo hace que todos estos elementos funcionen conjuntamente, sino que tambin trabaja con elementos procedentes de otras aplicaciones y con datos procedentes de gestores de bases de datos diferentes de Oracle.

Creacin de Icono de Acceso directo para el Formulario


Para crear el icono de acceso se deber buscar el archivo ifrun60.exe que se encuentra dentro de la carpeta BIN en el directorio donde se instal el Oracle. Para Crear el icono en mquinas con servidor en red: Se deber dar clic derecho crear acceso directo. Darle un nombre al icono

En el destino escribir: C:\ORANT\BIN\ifrun60.EXE C:\CABECERA_DETALLE USERID=SCOTT\TIGER@UNAQ Iniciar en: C:\ORANT\BIN

Donde UNAQ es el nombre de la cadena de conexin con el servidor y en caso de que sea un acceso local no se lo incorporar.

UNIDAD III OBJETIVOS DEL CAPITULO Al final de este captulo, Ud. deber ser capaz de: Instalar un administrador de bases de datos Obtener ayuda en lnea Configuracin del manejador de bases de datos Aprender sobre el manejo de triggers y procedimientos almacenados

ACTIVIDADES: 1. Recopilar informacin de programacin en T-SQL 2. Obtener manuales de referencia de Oracle CRITERIOS DE EVALUACIN: Examen escrito Desarrollo de ejercicios Trabajos individuales

CAPITULO I SQL Server Qu es SQL Server?


SQL es un manejador de Base de Datos relacional es decir un RDBMS de tipo cliente servidor que usa el lenguaje SQL para interactuar. Una base de datos tpicamente tiene dos componentes: Archivos fsicos que mantienen la base de datos El software que permite el acceso de datos. Es el software maneja la base de datos y es responsable de asegurar la estructura de la misma incluyendo: o Manteniendo de las relaciones entre los datos de base (integridad referencial) o Asegurar el almacenamiento correcto de los datos o Recuperar los datos a un punto conocido de consistencia en caso que el sistema falle

ARQUITECTURA CLIENTE SERVIDOR.Es una arquitectura donde los archivos de la base datos y el software de RDBMS residen en un computador que es el servidor. Un cliente posee una aplicacin que corre en computadores separados y que se comunican con un servidor sobre una red. Sql Server al igual que el Oracle viene en dos versiones para servidores y para estaciones de trabajo. INTEGRACIN CON NT.-

1. Seguridad.- SQL Server se integra con la seguridad del NT permitiendo que con tan
slo el nombre de usuario y la clave ingresen a Windows y SQL Server.

2. Soporte de Multiprocesamiento.- SQL soporta SMP (Mltiple Procesamiento


Simtrico) .

3. Visor de Sucesos.- Escribe los mensajes de error en el visor de eventos de Windows


dando como resultado mecanismos para ver y resolver problemas. Se encuentra en: Inicio Configuracin Panel de Control Herramientas Administrativas - Visor de Sucesos.

4. Servicios de NT.- SQL Server corre como un servicio en NT (es una aplicacin que se
ejecuta sin intervencin del usuario), siendo accesado por medio del Panel de Control, Herramientas Administrativas.

5. Monitor de Performance (Desempeo).- Despliega un reporte del estado de los


recursos del sistema.SQL permite monitorear su performance a travs del Sistema Operativo.

6. Uso del Index Server.- Es un servicio que mantiene un ndice

de todos los documentos mas utilizados. Provee un acceso a todos los documentos almacenados en su INTRANET o Sitio de Internet.

EXTRANET es ampliar los servicios corporativos de una INTRANET

PLATAFORMA DE SQL.SQL trabaja en el entorno de Windows (9x, NT) pero en 9x funciona como aplicacin y en NT funciona como servicio.

SERVICIO.Tienen mucho que ver con el sistema operativo. El usuario puede modificar los servicios. APLICACIN.Es bsicamente un ejecutable e interviene el usuario por que es el que ejecuta o no.

ARQUITECTURA DE COMUNICACIONES
* A p l i c * A P I ( A p l i c a c * L i b r e r a c i n ( D I n t e r f a c e c i n ) d e a s d e R * E SV Q E LL O S eP r E v Re r ) ( O R A * d S e e Pr v r oi c g i ro a s m d a e s B d a e s e * B L a i bs er e d r e a sD d a et o Rs e d e d C L E d e D ) a t o s

l i e n t e

SERVIDOR.- Base de Datos - Servicios de Base de Datos (ODS.- Es un componente de SQL Server que maneja las conexiones de red, pasando los pedidos del cliente al SQL Server para su procesamiento y retornando cualquier resultado a la aplicacin del cliente) - Libreras de red (SQL Net).- Es un software de comunicaciones que empaquetan los pedidos y resultados de la base de datos para su transmisin usando un protocolo de red en particular. CLIENTE.- Aplicacin (Developer) - API (Interfase de Programas de Aplicacin) de Base de datos.- Es una interfase usada por cualquier aplicacin para enviar pedidos a SQL Server y procesar el resultado obtenido del mismo. SQL Server soporta ODBC, OLDB, ADO y RDO - Libreras de Red

Arquitecturas de aplicaciones

Nota.- La tecnologa que se esta imponiendo es el Internet.

CAPAS DE DESARROLLO DE APLICACIN DE DATOS Programacin en capas.Es dividir el procesamiento en reas. Un rea al manejo de Base de Datos (Integridad referencial), Procedimientos almacenados y otras funciones que intervengan con datos.

Bsicamente la Arquitectura se centra en una arquitectura de 3 capas. 1. La capa de presentacin que en este caso esta formada por los Componentes de IU, y los componentes de proceso de IU. Los componentes de IU pueden ser vistos como la parte con la cual interactuar el usuario. Las ventanas o pginas web, por decirlo de alguna manera. Los componentes de proceso de IU podramos asociarlos a clases de tipo controladora en UML. Es decir estos encapsulan lgica de navegacin y control de eventos de la interfase. 2. La capa de negocios encapsula lgica de negocios. Los servicios de esta capa son encapsulados en tres tipos de componentes, dos de los cuales se tocan en este ejercicio. Las entidades empresariales, que representan objetos que van a ser manejados o consumidos por toda la aplicacin, estos podran ser un modelo de objetos, xml, datasets con tipo, estructuras de datos, que permitan representar objetos que han sido identificados durante el modelamiento. Los otros tipos de objetos son los componentes empresariales que contienen lgica de negocio, y en algunos casos al usar COM+ son los objetos raz que inician las transacciones. 3. La capa de acceso a datos que contiene clases que interactan con la base de datos. Estas clases surgen como una necesidad de mantener la cohesin o clases altamente especializadas que ayuden a reducir la dependencia entre las clases y capas. Aqu podemos encontrar tambin una clase con mtodos estticos que permiten uniformizar las operaciones de acceso a datos a travs de un nico conjunto de mtodos, esta clase es el SQL Helper que tambin se usa en este proyecto DESARROLLO DE APLICACIONES: Los usuarios accesan al SQL Server a travs de una aplicacin que est escrita con una interfaz de objetos de datos o con una API. SQL Server soporta interfaces comunes y APIs nativos de bajo nivel. INTERFACES DE PROGRAMACIN DE APLICACIONES: Una API Base de Datos define como escribir una aplicacin para conectar una Base de Datos y pasar comandos a la Base de Datos. SQL Server provee soporte nativo para dos clases principales de Bases de Datos API, lo cual define la interfaz de objetos de datos que se puede

usar. Las Bases de Datos API se usan para tener mayor control sobre el comportamiento y desarrollo de las aplicaciones.

OLE DB: Esta es una interfaz de acceso a datos basada en el COM (Component Object Model). Soporta aplicaciones escritas usando OLE DB o Interfaces de Objetos de Datos basadas en OLE DB. Puede accesar a la informacin en SQL Server, otras Bases de Datos relacionales y otras fuentes de datos.

OPEN DATABASE CONNECTIVITY: 8ODBC) Es una interfaz por capas. Accesa directamente al protocolo SQL Server TDS y soporta aplicaciones o componentes que estn escritos usando ODBC o interfaces basadas en ODBC. Puede accesar a los datos en SQL Server, y otras Bases de Datos relacionales, pero generalmente no puede ser usado para accesar a otras fuentes de datos.

DATA OBJECT INTERFACES: En general, estas interfaces son ms fciles de usar que las Bases de Datos API pero pueden no tener tanta funcionalidad como un API. ACTIVEX DATA OBJECTS: (ADO) Encapsula la OLE DB API en un modelo simplificado de objetos que reduce el desarrollo de aplicaciones y los costos de mantenimiento. ADO puede ser usado a partir de Microsoft Visual Basic, Visual Basic para Aplicaciones, Active Server Pages (ASP) y el Scripting Object Model de Microsoft Internet Explorer.

REMOTE DATA OBJECTS: (RDO) Mapea y encapsula al ODBC API. RDO puede ser usado desde Visual Basic y Visual Basic para aplicaciones. ARQUITECTURA DE ADMINISTRACIN.- SQL tiene una arquitectura de administracin abierta o puede ser implementado por usuarios y un conjunto de herramientas graficas que automatiza la administracin del servidor. Dos componentes de SQL simplifican la administracin y son el SQL DMO y SQL Server AGENT.

S S

Q Q

L L

D S

( D A

i s t r i b g e n t M

t Oe d b

C O M M e t Cn o asO g Me T m +r ae nn s t a O c tb Sj e Q c j D C O M

tL )

e r v e r

E D

M L

I A

SQL DMO (Distributed Manager Objet).- Son un conjunto de objetos COM, COM+, DCOM (componentes) que nos permite la administracin que ocultan el detalle de los comandos TRANSACT SQL. Este es el lenguaje de programacin SQL. Las herramientas graficas utilizan SQL DMO que trabaja en conjunto con SQL Server para ejecutar las siguientes tareas: Administracin de eventos como estado de los procesos en que instancia ocurre un error, uso de memoria, etc., que trabajan en conjunto con el visor de sucesos de NT. Alerta y localizador, SQL Server puede enviar un e-mail o localizador del operador cuando suceda algn evento de importancia. Ejemplo: un redoloc. Ejecucin de tareas , incluye la creacin de tareas y planificacin de las mismas. Administracin de replicacin .- es el proceso de copiar los datos y transacciones de un servidor SQL Server a otro (Oracle), sincronizando los datos y moni toreando los cambios de los mismos.

SQL Server AGENT.- quien trabaja conjunto a SQL Server para ejecutar tareas de administracin, alertas y paginacin, ejecucin de tareas y replicacin ARQUITECTURA DE BASE DE DATOS Cada SQL Server tiene dos tipos de base de datos: Del sistema. De los usuarios.

BASE DE DATOS DEL SISTEMA

1. MASTER.- Controla los usuarios de la base de datos y la operacin de SQL Server 2. 3. 4.


generando informacin de cuentas de usuarios, variables de entorno y mensajes de error, es decir la administracin de SQL Server. MODEL.- Provee de una plantilla o prototipo para nuevas bases de datos de los usuarios TEMPDB.- Provee un rea de almacenamiento para tablas temporales y cualquier otro trabajo temporal necesario MSDB.- Administrada por el SQL Server AGENT y provee de un rea de almacenamiento para el uso del agente de SQL Server. PUBS y NORTWIND.- Son base de datos de aprendizaje. Cuando SQL Server es arrancado, todas las base de datos definidas por el servidor son disponibles para todos los usuarios conectados al servidor y cada conexin es asociada a una base de datos en particular COMPONENTES DE SQL SERVER Tenemos los siguientes agrupados en tres niveles: Software de Servidor, Software de Cliente y Objetos de Base de Datos 1. SOFTWARE DE SERVIDOR.- Software en el servidor necesitamos de servicio de SQL Server. Son componentes que procesan todos los comando TRANSACT SQL que son enviados desde el servidor desde una aplicacin servidor cliente y maneja todos los archivos que comprenden la base de datos en el servidor

El servicio de agente de SQL Server. Maneja las actividades planificadas y puede enviar alertas al administrador del sistema cuando ocurran problemas en el servidor SQL Server(ENGINE) que es el motor de la base de datos.

M * * * S S L Q L S e r v e r e r v i c i o s d e i b r e r a s d e l a B e d a s e d e DS S E

C Q L e r v e r E G E N

M T

S D T C ( M r a n s a c t i o n

S C

D o o

i s t r i b u t e d r d i n a t i o n )

S aQ t oL s e r v e rS N G I N A

M A H

e r r r a m i e n t a s d m i n i s t r a t i v a s G R A

I S

2. SOFTWARE DE CLIENTE.- Incluye una variedad de componentes de software para disear y crear Base de Datos, consultar datos, administrar el servidor y buscar ayuda entre los que tenemos: Administrador corporativo.- que se basa en el MMC (Microsoft Management Console ) que consiste en un conjunto de herramientas de administracin de windows. 3. MS DTC (MS Distributed Transaction Coordinator).- Es un manejador de transacciones que permite que las aplicaciones de los clientes incluyan diferentes fuentes de acceso en los datos. El MS DTC coordina la terminacin exitosa de las transacciones para asegurar que todas las actualizaciones en todos los servidores sean permanentes y en caso de error todas las actualizaciones o modificaciones sean canceladas SERVICIO DE SQL Server.- Es el componente que procesa todos los comandos de TRANSACT SQL que son enviados desde la aplicacin del cliente y maneja los archivos que comprende la base de datos. HERRAMIENTAS ADMINISTRATIVAS Que nos asisten en aspectos particulares de administracin de SQL Server (analizador de consultas). Herramientas de modo comando.- que nos permite ejecutar programas TRANSACT SQL y Script y son el OSQL y BCP. Y adicionalmente se puede encontrar ISQL

OSQL.- ejecuta comandos TRANSACT SQL basndose ADODBC BCP.- es un utilitario para importar y exportar datos desde y hacia SQL ISQL.- herramienta de integracin con versiones a versiones anteriores

Deben estar en un cliente o instaladas en el mismo servidor, tenemos:

ENTERPRICE MANAGER (Administrador Corporativo).- Es la interfase de administracin grfica primaria. Permite disear y consultas base de datos de los usuarios. ANALIZADOR DE CONSULTAS.- Es una herramienta de consultas graficas para analizar el plan de una consulta, informaciones estadsticas y manejar mltiples consultas en ventanas diferentes. CONFIGURACIN DE CLIENTE.-Utilitario usado para manejar la configuracin de los componentes de comunicacin. MONITOR DE PERFORMANCE.- Es el utilitario usado para arrancar, parar los servicios SQL Server. SQL Server SETUP.- Es la aplicacin usada para instalar y reconfigurar SQL Server.

ASISTENTES DE SQL Server.- Conjunto de herramientas que le guan al usuario a travs de complejas tareas. OBJETOS DE BASE DE DATOS

1. TABLAS.- Conjunto de registros organizado en forma de columnas. 2. CONSTRAINT.-Definen reglas que proveen de mecanismos para asegurar la
identidad de la base de datos en parmetros a nivel de PRIMARY KEY, FOREIGN KEY. 3. NDICES.- Provee un acceso rpido a los datos y puede asegurar la integridad de datos. 4. VISTAS.- Provee de una manera distinta de mirar los datos desde una o mas tablas o vistas en una base de datos. 5. PROCEDIMIENTOS ALMACENADOS.- Es una coleccin de comandos TRANSACT SQL que se recopilan y se guardan en la base de datos para su ejecucin posterior. 6. TRIGGERS.- Es una forma especial de procedimiento almacenado que se ejecuta automticamente cuando un usuario modifica los datos de una tabla. INSTALACIN Y CONFIGURACIN DE SQL SERVER Requerimientos de Hardware y Software.- el conocimiento de los requerimientos de hardware y software antes de que instale SQL Server le habilita seleccionar el hardware y software apropiado. Computador Memoria Espacio en disco Herramientas cliente Sistema de archivos Sistema operativo Compatibles con INTEL o DEC Alpha Mnimo 32 MegaBytes y en Versin 7.0 Versin 2000 en adelante Mnimo 64 MegaBytes Instalacin completa 148 y Mnimo 90 Megabytes del Entre 14 y 50 Megabytes Puede funcionar el FAT y NTFS (NTFS se puede poner la seguridad en cambio la fat32 no) Windows 9X o NT Service pack

OPCIONES DE INSTALACION Modo de Licenciamiento.- Existen dos modos de licenciamiento por servidor o por sitio o estacin de trabajo.

1. Por Servidor.- La licencia de acceso al cliente (CAL), las cal son asignada a un
servidor en particular. Especificando el numero mximo de conexiones simultaneas al servidor el cual requiere el mismo numero de licencias de cal

2. Por Estacin de Trabajo.- Cada estacin de trabajo que se conecte a SQL Server con
software de Microsoft o de terceras personas requieren de una cal. Este modo permite obtener un nmero ilimitado de conexiones simultneas.

R
S 5

D
e r v e r W S T

s t a c i o

e s

r a b

j o

S T o d

s e a s

d d

e s c o e b e n

e c t a t e n e r

n a s u C

e s t a c i n A L p a r a

o d r a c c e d e r o t r o u s u c o n e c t a r a c u a l q u i e r S

a r i Q L

R
S 8

D
e r v e r W S T S e r v e r

s t a c i o

e s

r a b

j o

a l q

i e r

e s t a c i

t r a b

a j o

a c c e d

e r

c u

a l q

i e r

Soporte de Red.- SQL Server usa las libreras de red para comunicarse con un protocolo especfico y empaquetar los pedidos o resultados desde y hacia el servidor Protocolo es un conjunto de normas para transmitir informacin a travs de un idioma. Entre algunos protocolos tenemos:

TCPIP.- Este no es un protocolo, si no un conjunto de protocolos, que toma su nombre de los dos ms conocidos: TCP (Transmission Control Protocol, protocolo de control de transmisin) e IP (Internet Protocol). Esta familia de protocolos es la base de la red Internet, la mayor red de ordenadores del mundo. Por lo cual, se ha convertido en el ms extendido. Este se instala por defecto. NETBEUI.- NetBIOS Extended User Interface (Interfaz de usuario extendido para NetBIOS). Es la versin de Microsoft del NetBIOS (Network Basic Input/Output System, sistema bsico de entrada / salida de red), que es el sistema de enlazar el software y el hardware de red en los PCs. Este protocolo es la base de la red de Microsoft Windows para Trabajo en Grupo. IPX/SPX (Internet Packet eXchange/Sequenced Packet eXchange).- Es el conjunto de protocolos de bajo nivel utilizados por el sistema operativo de red Netware de Novell. SPX acta sobre IPX para asegurar la entrega de los datos. APPLETALK.- Este protocolo est incluido en el sistema operativo del ordenador Apple Macintosh desde su aparicin y permite interconectar ordenadores y perifricos con gran sencillez para el usuario, ya que no requiere ningn tipo de configuracin por su parte, el sistema operativo se encarga de todo. BAYAN VINES MULTIPROTOCOLO

Para aadir una librera de red a SQL Server despus de la instalacin deben ejecutar nuevamente el setup. Conjunto de Caracteres.- Durante la instalacin se escoge el cdigo de pgina que contiene el conjunto de caracteres que soporta el lenguaje que usa que es para todas las bases de datos del servidor.

Si usted cambia el conjunto de caracteres despus de haber instalado SQL Server, debe recrear la base de datos master y todas las de los usuarios Orden de Clasificacin.- Son un conjunto de reglas quien determinan como SQL Server ordena y presenta los datos en respuesta a las consultas de la base de datos dependiendo del conjunto de caracteres que hayan escogido Si cambia el orden la clasificacin despus de instalar SQL Server debe recrear todas las bases de datos El directorio de instalacin.- Ud puede seleccionar un directorio por defecto para la instalacin de SQL Server o cambiar para los archivos, datos o ambos Autentificacin Del Login: Un usuario debe tener una cuenta para conectarse al SQL Server. Este reconoce 2 mecanismos de autentificacin: Autentificacin de SQL Server y de Windows NT. Cada uno tiene un diferente tipo de cuenta.

Cuenta de Acceso SQL Server.Despus de que los usuarios han sido autentificados, y se les ha permitido conectarse al SQL Server, deben tener cuentas en la Base de Datos. Las cuentas de usuario y los roles, identifican permisos para ejecutar tareas.

Ejecucin de SQL Server.Puede ser de modo manual (al dar clic para levantar la base de datos) o automtico (los servicios arrancan automticamente para Windows sin necesidad que el usuario ingrese al sistema) Introduccin a la instalacin de SQL Server 2000 El programa de instalacin de Microsoft SQL Server 2000 crea una nueva instancia de SQL Server 2000 o actualiza una versin anterior. Antes de instalar o actualizar a SQL Server 2000 conviene que lea los siguientes temas. Tema Preparar la instalacin de SQL Server 2000 Descripcin Indica los pasos que se deben seguir antes de ejecutar el programa de instalacin de SQL Server 2000

SQL Server 2000: Ediciones y componentes Presenta una vista general de las ediciones de SQL Server 2000, las opciones de instalacin y los componentes Actualizar una instalacin existente de SQL Resume las opciones para actualizar a SQL Server Server 2000 a partir de una versin anterior Para obtener ms informacin, consulte los temas relacionados en la siguiente tabla. Para instalar Consulte

SQL Server 2000 (instalacin tpica del Cmo instalar SQL Server 2000 (programa de motor de bases de datos relacional, las instalacin) herramientas cliente y los componentes de conectividad del cliente) Las herramientas cliente de SQL Server Cmo instalar slo las 2000 (programa de instalacin) (incluye las herramientas de administracin y componentes de conectividad del cliente, no requiere un servidor) herramientas cliente

Slo la conectividad de SQL Server 2000 Cmo instalar slo la conectividad (programa de (instala nicamente los componentes de instalacin) conectividad del cliente, sin otras opciones) Una instancia con nombre o varias Cmo instalar una instancia con nombre de SQL

instancias de SQL Server 2000

Server 2000 (programa de instalacin)

Un servidor virtual SQL Server 2000 para el Antes de instalar el clster de conmutacin por error clster de conmutacin por error Analysis Services English Query Instalar Analysis Services Instalar English Query

Instalar Servidor de Base de Datos.El SQL Server 2000 proporciona el soporte robusto para soluciones escalables de Base de Datos.

Instalar Servicio de Anlisis.El Analysis Services de SQL Server 2000 est diseado para facilitar las aplicaciones de procesamiento analtico en lneas y de minera de datos.

Instalar English

Query.-

SQL Server 2000 English Query ayuda a los programadores a generar aplicaciones que permiten que los usuarios puedan realizar preguntas en ingls en lugar de construirlas con una instruccin SQL.

Con el asistente de instalacin permite instalar una instancia nueva de SQL Server a modificar una instancia ya existente.

Despus debemos colocar si el equipo a crear la instancia ya existe algn tipo de servidor SQL virtual ya existe para escoger el tipo de equipo a utilizar, entre estos tenemos: Equipo Local, Equipo remoto, Servidor Virtual. Informacin de instalacin remota La informacin de instalacin remota se necesita para definir la seguridad en dos situaciones de instalacin distintas: Cuando opta por instalar Microsoft SQL Server 2000 en un equipo remoto. Cuando se ejecuta el programa de instalacin en un equipo que forma parte de un clster, aunque no se est creando ni manteniendo una instalacin de clsteres de conmutacin por error de SQL Server. En una instalacin remota, la instalacin de SQL Server recopila la informacin que ha especificado en los cuadros de dilogo de la instalacin y registra las entradas en el archivo SETUP.ISS. Al mismo tiempo, este proceso de instalacin remota inicia un servicio remoto, copia archivos en el directorio compartido \ADMIN$ y ejecuta una instalacin desatendida en el equipo remoto mediante las opciones especificadas en SETUP.ISS. Para los equipos agrupados, se muestra el cuadro de dilogo Informacin de instalacin remota, ya que cualquier instalacin en un sistema de clster de conmutacin por error necesita la cuenta de administrador para instalar el Coordinador de transacciones distribuidas de Microsoft en ambos nodos o bien para comprobar la presencia de MS DTC. Se debe especificar informacin del administrador que sea vlida para todos los nodos seleccionados en el sistema de clster de conmutacin por error. Opciones Nombre de usuario, contrasea y dominio Especifique la cuenta de usuario con la que el programa de instalacin de SQL Server inicia un servicio en el equipo remoto. Esta cuenta de usuario debe ser de administrador del equipo remoto y tener acceso de lectura al directorio de archivos de origen de la instalacin. La cuenta de usuario que se especifica en esta pantalla no debe confundirse con: La cuenta de usuario con la que se inicia la sesin en el equipo local. La cuenta de usuario asignada a los servicios SQL Server y Agente SQL Server durante la instalacin de SQL Server.

Todas estas cuentas de usuario se especifican por separado. Sin embargo, puede utilizar la misma informacin de usuario en ambos casos. Es decir, puede usar el mismo nombre, contrasea y dominio de Windows para cada cuenta. Equipo de destino El nombre del equipo remoto, especificado en el cuadro de dilogo Nombre del equipo, se muestra en texto esttico. Ruta de acceso de destino El nombre del equipo remoto y el directorio, en el formato de la Convencin de nomenclatura universal, del equipo remoto en el que se va a instalar SQL Server. Por ejemplo: \\target_computer\C$\Program Files\Microsoft SQL Server Archivos de origen de la instalacin Ubicacin de los archivos del programa de instalacin que se utiliza para la instalacin remota.

En esta parte de la instalacin se debe seleccionar si se va a crear una nueva instancia SQL Server; o si desea Actualizarla, Quitarla o Agregarla componentes o elegir una opcin avanzada para la instalacin.

Aqu debe escribirse el nombre del usuario y su compaa a la que representa. Por lo general se debe dejar por defecto.

Aqu nos indica las condiciones de contrato de licencia para el usuario al momento de instalar SQL Server 2000 el cual esta sometido el usuario a cumplir en el momento de aceptar el software.

Se debe elegir una instancia de instalacin. Para lo cual en nuestro caso tendremos que escoger Herramientas Clientes y Servidor puesto que necesitamos ver la informacin de las dems estaciones de trabajo que a su vez tambin son servidores.

Para el nombre de la instancia escogeremos la predeterminada para la instalacin pues mantiene instancias de SQL Server anteriormente predefinidas.

En el tipo de instalacin escogeremos Tpica pues estos son opciones que en el transcurso del uso son las ms frecuentes y recomendados para el usuario.

Configuraremos las cuentas de servicios que servirn de acceso a SQL Server. Al escoger la utilizacin de la misma cuenta para el servicio al iniciar se tendrn como servicio a SQL Server y al Agente SQL Server

Para el modo de autenticacin escogeremos el modo mixto y en este caso escogeremos contrasea en blanco puesto que los dems usuarios que vayan a ocupar no tengan problemas al ingresar (No se recomienda dejar sin contrasea).

Luego de todo esto el programa de instalacin empezara si no tiene ningn problema.

Empezar a copiar los archivos necesarios para la instalacin y luego para su uso.

Empezar a instalar en la direccin definida por el usuario o por defecto anteriormente especificada.

Luego nos aparecer un mensaje que esta actualizndose en el sistema operativo de nuestro cliente - servidor

Para finalizar nos aparece un dilogo que la instancia a realizado con xito.

Se recomienda reiniciar la mquina para que se actualice la nueva instalacin realizada. SOPORTE DE RED Usa los herramientas de red para comunicarse con un protocolo especifico entre los cuales tenemos : TCP/IP. \\servidor\R REDES NET BUI \\canalizacion de nombre MICROSOFT IPX/SPX NOVEL Apple Talk MAC BAYAN VINES Nota: Para aadir una librera de red a SQL Server Uds. deben volver a ejecutar el instalador. CONJUNTO DE CARACTERES Durante la instalacin se debe escoger el cdigo de pgina que contiene el conjunto de caracteres que su lenguaje utiliza y se empleara en todas las bases de datos Nota: Si Uds. cambia el conjunto de caracteres deben recrear la base de datos master y toda la base de datos de los usuarios. SENTIDO DE ORDENAMIENTO. Son el conjunto de reglas que determina como SQL Server recupera y presentan los datos en respuesta a una consulta ADMINISTRADOR CORPORATIVO Es el administrador de la base de datos de SQL Server y es una herramienta grafica que nos permite administrar la herramienta de SQL Server Todas las tablas que empiecen con sys. Son del diccionario de datos.

Podemos visualizar en lado izquierdo los objetos y a la derecha los contenidos Registro del Servidor

Servidores de Microsoft.- Ingresamos a un asistente que ayudar a registrar uno o ms servidores SQL Server.

TIPOS DE BASE DE DATOS Tenemos dos tipos de Base de Datos de Sistema y de Usuario. En la Base de Datos de Sistema tenemos a: MASTER, MODEL, MSDB, TEMPDB y en el de Usuario tenemos: NORTHWIND, PUBS y OTROS

Base de Datos NORTHWIND.En una Base de Datos podremos encontrar: Diagramas (Visualizacin de relaciones que tiene la base de datos con respecto a sus tablas), Tablas (contenido de filas y columnas), Vistas, Procedimientos almacenados, Usuarios, Funciones, Reglas, Valores predeterminados, Tipos de datos definidos por el usuario, Funciones definidos por el usuario.

En las TABLAS podremos visualizar el contenido de cada uno de ellos con tan seleccionar la tabla y solo dar clic derecho sealar abrir tabla y devolver todas las filas.

Lista los datos de la TABLA ORDERS

PERMISOS.- Aqu muestra el permiso que se da a la base de datos desde el servidor ya que sin estos permisos no se podr realizar ninguna consulta. Para lo cual cogeremos la Base de Datos MASTER como ejemplo.

Tambin podremos visualizar las claves, tipos de variables, etc como si visualizaremos el contenido de una tabla en Microsoft Access. Para esto tomaremos la Base de Datos NORTHWIND y en la TABLA ORDERS.

CREACIN DE BASE DE DATOS Cuando se crea la base de datos se debe conocer la estructura de la misma, esta estructura debe ser:

DATABASE

DATOS PRIMARIO (EXTENSIN MDF) SECUNDARIO (EXTENSIN NDF) TABLAS INDICES

TRANSACCIONES LOG (EXTENSIN LDF)

EXTRACT (8 8 Kb Pgina) Unidad Mnima Pginas 8 KB

Cuando crea una base de datos es importante que comprenda como se almacena los datos para calcular y especificar el tamao que tendr una base de datos. Al momento de crear considere los aspectos: 1. Todas la bases de datos tienen un archivo primario de datos con extensin MDF y uno o ms archivos de transacciones. Tambin pueden tener varios archivos secundarios de datos con la extensin MDF. Los archivos tienen un nombre lgico que se utiliza en TRANSACT SQL y un nombre fsico que utiliza el sistema operativo 2. Cuando crea una base de datos una copia de la base de datos MODEL que incluye las tablas del sistema se copia a la nueva base de datos. 3. Los datos son almacenados en paginas y cada pagina tiene 8 Kb .esto significa que una base de datos tiene 128 paginas por Mg. 4. Cada pagina arranca con un encabezado de 96 bits que es usado para almacenar el sistema, mximo se puede almacena 8060 bits por registro. 5. Las tablas y los ndices se almacenan en EXTENTS. Un EXTENT est compuesto de 8 paginas y tiene 16 EXTENTS por Mb. 6. Los archivos de transacciones mantienen la informacin necesaria para recobrar la base de datos en caso de falla. Por default es el 25% del tamao de los datos , y se recomienda que se instale en un disco separado al de la base 7. Los archivos de transacciones graba las modificaciones a los datos INSERT, UPDATE, DELETE. CREACION DE LA BASE DE DATOS 1. Nombre de la base de datos 2. Archivos en los cuales la base de datos va a recibir 3. Porcentaje de espacio requerido en cada dispositivo archivo en MG 4. Ubicacin y tamao de archivos de transacciones. CREATE DATA BASE nombre [ on {[PRIMARY](NAME=nombre_logico, FILENAME=NOMBRE_FISICO_DATA.MDF [,SIZE=tamao] [,MAXSIZE=tamao_maximo] [,FILEGROWTH=incremento]) ] [LOG ON NAME=nombre_logico_log, FILENAME=NOMBRE_FISICO_LOG .LDF [,SIZE=tamao] [,MAXSIZE=tamao_maximo] [,FILEGROWTH=incremento]) ]

Despus de conectarse al servidor y poner la opcin nueva base de datos.

Podremos visualizar la Base de Datos Creada

Tambin podemos crear Base de Datos escogiendo en el MENU HERRAMIENTAS y dentro del ANALIZADOR DE CONSULTAS y realizar la sintaxis para crear la Base de Datos.

EJERCICIO Cree una base de datos llamado Librera 2 Mb en archivo de datos y 1 Mb en archivo log considere 1 mega de incremento en ambos casos y sin limite de tamao Considere los siguientes aspectos al momento de crear una Base de Datos. Ejecutar el Analizador de Consultas de Consultas en el Men Herramientas. Conectarse con el servidor. Dirigirse ala Base de Datos. Clic derecho en nueva Base de Datos. En el proceso de creacin darle un nombre a la Base de Datos nueva (librera). En la parte de arriba de la solapa Archivo de datos y Registro de transaccin. En el Archivo de datos nos aparece el nombre del archivo aadido con data esto es el modo fsico (librera_data) con extensin ndf por defecto. A un archivo primario si se desea tener la de fragmentacin no es recomendable llenar los archivos secundarios. El tamao de la base de datos es de 1Mb. Existen dos secciones: al lado izquierdo esta en funcin de porcentajes o Megabytes. En una base de datos no se necesita el crecimiento. En el registro de transaccin es igual y por defecto es el 25% no menos de 1 Megabytes. En el registro de transaccin nos aparece el nombre del archivo aadido con log esto es el modo lgico (librera_log) CREATE DATABASE LIBRERIA ON PRIMARY (NAME=LIBRO1, FILENAME='D:\MIS_DOC\TONY\SGBD\LIBRO1.MDF', SIZE = 1, MAXSIZE=2, FILEGROWTH=0) LOG ON (NAME=LIBRO2, FILENAME='D:\MIS_DOC\TONY\SGBD\LIBRO2.MDF', SIZE = 1, MAXSIZE=1, FILEGROWTH=0) El proceso CREATE DATABASE est asignando 1.00 MB en el disco 'LIBRO1'. El proceso CREATE DATABASE est asignando 1.00 MB en el disco 'LIBRO2'.

134

CONSTRAINTS
Son el mtodo preferido para asegurar la integridad de los datos y pueden ser definidos por los comandos CREATE TABLE o ALTER TABLE. Consideren los siguientes puntos cuando implemente o modifique constraints: 1. 2. 3. 4. SQL Server verifica la existencia de datos cuando aade un constraints. Los constraints son mantenidos separadamente de la estructura de la tabla. Cualquier violacin de un constraints termina el comando actual Para ayuda de constraints pueden ejecutar los procedimientos almacenados llamados SP_helpconstraint y SP_help

INDICES SQL Server accesa a los datos de dos formas: Secuencialmente o por medio de ndices. El optimizador de consultas determina cuando utilizar el acceso secuencial o el indexado. Por que Indexar: 1. Los ndices pueden acelerar consultas que unan tablas y se ejecutan operaciones de clasificacin o agrupamiento. 2. Permiten que los registros sean nicos. 3. Los ndices son creados y mantenidos en orden ascendente. 4. Son mejor creados en columnas con alto grado de selectividad. Por que no Indexar: 1. Cuando modifica los datos en la columna indexada. 2. El mantenimiento de los ndices requiere de tiempo y de recursos. 3. Los ndices en pequeas tablas producen poco beneficio. Para crear un ndice lo puede hacer dentro del Administrador Corporativo o con el Analizador de Consultas con la instruccin CREATE INDEX. Sintaxis: CREATE [UNIQUE][CLUSTERED][NONCLUSTERED] INDEX nombre_indice ON tabla.columna,

SP_HELPINDEX Procedimiento almacenado de ayuda

Se graba en la tabla SYSINDEXES

Para la eliminacin de ndices con la instruccin DROP INDEX. Sintaxis: DROP INDEX nombre TIPOS DE INDICES (EXCLUSIVO SQL SERVER) Existen dos tipos : 1. CLUSTERED. 2. NON CLUSTERED. CLUSTERED.-

135

Reflejan el ordenamiento fsico de los registros en una tabla. Cree un ndice CLUSTERED en columnas de tablas que frecuentemente son basados por rangos: 1. Cada tabla solo puede tener un solo ndice CLUSTERED. 2. El ordenamiento fsico de las tablas y el orden del ndice son los mismos. 3. Los campos nicos son mantenidos explcitamente usando la palabra UNIQUE o implcitamente usando el identificador nico. 4. El tamao promedio de un ndice CLUSTERED es el 5 % del tamao de la tabla. 5. Durante la creacin del ndice se utiliza espacio de la base de datos, mas no la del temporal (TEMPDB) requeriendo de un 20 % de espacio libre. NONCLUSTERED.Representan el ordenamiento lgico de las filas y son necesarios como una forma de un medio alternativo para bsqueda de datos (por ejemplo pascal, c, ). Debe crear un ndice CLUSTERED antes de crear ndices NONCLUSTERED. Considere los siguientes aspectos: 1. Este tipo de ndices es utilizado por DEFAULT. 2. Puede tener hasta 256 ndices por tabla. 3. Son creados en columnas los cuales tienen un alto grado de selectividad de ser nicos. Relacin entre CLUSTERED y NONCLUSTERED
a x z w y 1 a 4 x 2 z 5 w 3 y

La diferencia que se puede dar es primero observar el mtodo de ordenamiento, si no existe para luego crearlo mediante un ndice que lgicamente ordene y al relacionarlo el nmero de seleccin con el datos es el que indicar al momento de posicionarse.

TRIGGERS DE BASE DE DATOS.Un TRIGGER es un objeto de Base de datos que se usa para reforzar las reglas del negocio y controlan la integridad de los datos. Un TRIGGER se define en una tabla especfica. CARACTERSTICAS.-

Son invocados automticamente en respuesta a un evento que puede ser: Insert, Delete, Update.
I N T R I G G E R D U E P S L D E E A R T T T E E

Un TRIGGER no puede ser llamado directamente y no pasa ni acepta parmetros. Un TRIGGER es una TRANSACCIN.

Transaccin.- Es el conjunto de comandos que son tratados como uno solo (O se ejecutan todos los comandos o no se hacen ninguno el mejor ejemplo es al dar un COMMIT). USO DE LOS TRIGGERS.-

136

El beneficio principal del uso de los TRIGGERS es que ellos pueden tener una lgica compleja de procesamiento que use cdigo TRANSACT SQL. Asegurar cambios en cascada a travs de tablas relacionadas en una Base de Datos Refuerzan las capas de negocio ( Establecen como va a funcionar el sistema el mejor ejemplo es el IVA). Mantiene datos desnormalizados (Ejemplo el total de una factura). Comprara los estados de antes y despus de que los datos sean modificados.

CONSIDERACIONES CUANDO USE TRIGGERS.Los TRIGGERS son reactivos, en cambio los CONSTRINT son pro-activos Los CONSTRAINT son verificados primero. Las tablas pueden tener mltiples TRIGGERS Los propietarios de la tablas deben tener permisos para ejecutar todos los comandos en el TRIGGER Los TRIGGERS no deben ser disparadores o creados en tablas temporales o vistas. Se recomienda que no se incluya comandos SELECT.
E M P o e T R ( S I G G Q L ) E I N R D U E P S L D

e m p n d n a m j o b s a l

E M P e m p n o d n a m e j o b s a l e m 2 1 0 4 0 2 p nd on 0 P 0 A a m jeo b s a

R ( S

rt in s e fo r_ I G G E Q L )

I e d j s p

N m n o b a l a

S p a

E n m

R o e

l 8 0 0 e0 t

e m 2 0 4 e m 1 0 2

nd on 0 P

j eo b

s a

l 8 0 l 0t e 0

e p n

i t Jo e f e 1 i t Ga e r e n3

e p a n

i tJo e f e 1 m i tGa j eo b s a

nd on 0 A

e r e n3

INSERT INTO EMP VALUES (2040,PEPITO,JEFE,180); Al insertar datos en la tabla INSERTED tambin se insertarn datos pero con la diferencia es que son temporales. INSERT INTO EMP VALUES(1020,ANITA,GERENTE,300); Al ingresar ms informacin, el anterior dato que estaba se elimina y se actualiza la tabla INSERTED con los nuevos datos ingresados.

137

P o e T R ( S

e m p n d n a m j o b s a l e m 2 1 X Y 0 4 0 2 p nd on 0 P 0 A A B a m

rt in s e fo r_ I G G E R Q L )

I N

R o e

e m p n d n a m j o b s a l p nd on 0 P p a m

jeo b

s a

l 8 0 t0 e 0 0 0

e m 2 0 4 e m 1 0 2 e m X Y

jeo b

s a

l 8 0 l 0t e 0 l 0 0

e p n

i t Jo e f e 1 i t Ga C D e r e n3 1 2

e p a n a

i t Jo e f e 1 m i tGa m C D jeo b s a

nd on 0 A

e r e n3 jeo b s a 1 2

nd on A B

Si se insertan ms de dos datos a la vez pues estos ser tomados como una sola insercin en el comando insertar y se almacenaran en el INSERTED en este caso los dos ltimos. DELETE FROM EMP WHERE SAL <100
E M P e m p n o d n a m e j o b s a l e m 2 1 0 4 0 2 p nd on 0 P 0 A a m jeo b s a
te d e le fo r_ I G G E Q L )

R ( S

I e d j s p

N m n o b a l a

S p a

E n m

R o e

l 8 0 0 e0 t

e m X Y

nd on A B

m C D

j eo b

s a 1 2 0 0

e p n

i t Jo e f e 1 i t Ga e r e n3

El DELETED crea una tabla virtual y se guarda los ltimos datos eliminados. OTRO UPDATE EMP SET SAL = SAL*1.20 WHERE SAL <300
ate upd for_ I G G E R Q L )

E M P e m p n o d n a m e j o b s a l e m 2 1 0 4 0 2 p nd on 0 P 0 A a m j eo b s a

R ( S

I e d j s p

N m n o b a l a

S p a

E n m

R o e

D e d j s l e m 2 0 4 p

E m n o b a l p a

L n m

E o e

l 8 0 0t e 0

e m 2 0 4

nd on 0 P

jeo b

s a

nd on 0 P

a m

j eo

s a

l 8 0

e p n

i t Jo e f e 1 i tGa e r e n3

e p

i t Jo e f e 2

1 6

e p

i t Jo e f e 1

El TRIGGER crea en las dos tablas INSERTED y DELETED. Crear una Base de Datos llamado LIBRERIA y dentro de l van a crear las tablas DETALLE con los venta_id, cantidad y precio; y en la tabla VENTA los campos venta_id y total create table venta (

138

venta_id char(10), total numeric(5), constraint pk_venta primary key(venta_id) ); create table detalle ( venta_id char(10), cantidad numeric(5), precio numeric(5), );

Aqu nos muestra las tablas recientemente creadas que son VENTA y DETALLE. TRIGGERS.- Son usados para reforzar la integridad referencial. Los TRIGGERS son definidos sobre una tabla. Los TRIGGERS son bloques de cdigo T-SQL que responden a un evento (INSERT, UPDATE, DELETE). INSERT TRIGGER UPDATE DELETE TRIGGER (INSERT)

TOTAL

DETALLE

INSETED

UNAQ VENTA PRECIO CANTIDAD Se deber primero enserar con: ------------------------------------------------------------------------------------TOTAL -------------------------------------------

Venta Id Cantidad Precio

139

update venta set total = 0 TABLA VENTA

insert into venta(venta_id,total) values('1',0) TABLA DETALLE

insert into detalle (venta_id,cantidad,precio) values (1,3,10); TABLA VENTA CON TRIGGER DE INSERCION

TABLA DETALLE

INSERT INTO DETALLE VALUES (1,5,2)

TABLA VENTA YA MODIFICADA POR EL TRIGGER

UPDATE VENTA SET TOTAL=TOTAL+(SELECT SUM(CATIDAD*PRECIO)FROM INSERTED WHERE INSERTED.VENTAID=TOTAL.VENTAID) INSERT INTO VENTA VALUES SELECT VENTAID, SUM(CANTIDAD * PRECIO) AS TOTAL FROM INSERTED (*) GROUP BY VENTA_ID DELETE DETALLE WHERE PRECIO=2

DELETED.- Almacena todos los registros que se han eliminado en el ltimo DELETE UPDATE VENTA SET TOTAL=TOTAL (SELECT SUM(CANTIDAD*PRECIO)FORM DELETED) WHERE DELETED.VENTAID=TOTAL.VENTAID

140

UPDATE VENTA SET TOTAL=TOTAL TOTAL + INSERTED (SELECT SUM(CANTIDAD*PRECIO)FROM DELETED) + (SELECT SUM(CANTIDAD*PRECIO) FROM INSERTED) WHERE (INSERTED.VENTAID=TOTAL.VENTAID) EJEMPLO DE TRIGGERS /*CREACION DE BASE DE DATOS*/ DROP DATABASE LIBRERIA CREATE DATABASE LIBRERIA ON PRIMARY ( NAME=LIBRO_DATA_MDF, FILENAME='D:\LIBRERIA\LIBRO_DATA.MDF', SIZE = 1, MAXSIZE=2, FILEGROWTH=0 ) LOG ON ( NAME=LIBRO_LOG_LDF, FILENAME='D:\LIBRERIA\LIBRO_LOG.LDF', SIZE = 1, MAXSIZE=1, FILEGROWTH=0 ) /*CREACION DE TABLAS: VENTA Y DETALLE*/ DROP TABLE VENTA DROP TABLE DETALLE CREATE TABLE VENTA ( VENTA_ID NUMERIC(5), TOTAL NUMERIC(5), CONSTRAINT PK_TOTAL PRIMARY KEY (VENTA_ID) ); CREATE TABLE DETALLE ( VENTA_ID NUMERIC(5), CANTIDAD NUMERIC(5), PRECIO NUMERIC(5), ); /*CREACION DE TRIGGER CALCULO_INSERT*/ CREATE TRIGGER calculo_insert ON detalle FOR INSERT AS UPDATE venta SET total=total+(select sum(cantidad*precio) as venta

141

FROM inserted WHERE inserted.venta_id=venta.venta_id) /*CREACION DE TRIGGER CALCULO_DELETE*/ CREATE TRIGGER calculo_delete ON detalle FOR DELETE AS UPDATE venta SET total=total-(select sum(cantidad*precio) FROM DELETED WHERE deleted.venta_id=venta.venta_id) /*COMPROBACIN DE INSERCIN DE DATOS*/ insert into vneta(venta_id,total) values('10',30); insert into detalle(venta_id,cantidad,precio) values('20',5,3) select * from venta /*Selecciona la tabla venta*/ update venta set total = 0 /*Sirve para inicializar en cero al total*/ TIPOS DE VARIABLES Variables local .- son los crean los usuarios y empiezan con una @ y registro Variables Globales.- son la variables que interactan con los del sistema y empieza con doble @@. Para validar un TRIGGER CREATE TRIGGER CALCULO ON DETALLE FOR INSERT, UPDATE, DELETE AS If UPDATE(TOTAL) (SELECT COUNT(*)CONTAR FROM VENTA, INSERTED WHERE (VENTA.VENTA_ID=INSERTED.VENTA_ID)) If UPDATE(TOTAL) (SELECT COUNT(*)CONTAR FROM VENTA, DELETED WHERE (VENTA.VENTA_ID=DELETED.VENTA_ID)) If UPDATE(TOTAL) (SELECT COUNT(*)CONTAR FROM VENTA, UPDATED WHERE (VENTA.VENTA_ID=UPDATED.VENTA_ID)) GO PROCEDIMIENTOS ALMACENADOS STORED PROCEDURE.- Son un conjunto de comandos SQL que se almacena en el servidor y son un mecanismo de encapsular las tareas repetitivas que se ejecutan eficientemente Existen cinco tipos de SPs:

1. SPs del Sistema .- Permite a los administradores ejecutar consultas que involucran 2. 3. 4.
las tablas del diccionario de datos solo para tablas del sistema ejecuta solo los administradores. SP_HELP nombre de la tabla SPs Locales.- Son los creados por los usuarios SPs Temporales.- Son procedimientos que se ejecutan temporalmente que pueden ser locales cuando empiezan con el smbolo de numeral , o globales empiezan con dos numerales se activan cuando ingresa a la seccin SPs Remotos .- Son SP llamados desde un servidor remoto o desde un cliente que esta conectado a un diferente servidor

142

5. SPs Extendidos.- Se conocen como XP (extended procedure) son generalmente DLL


que se ejecutan fuera de SQL Server de manera parecida a los SPs CARACTERISTICAS DE LOS SP 1. Pueden contener comando que ejecuten operaciones en la base de datos 2. Acerca parmetros de entrada 3. Retorna un valor sea de xito o de fracaso. 4. Retorna mltiples valores a el programa que llamo al SP VENTAJAS 1. Comparte la lgica de programacin con otras aplicaciones 2. Provee mecanismos de seguridad. 3. Automticamente se puede ejecutar si el SP_PROCOPTION es configurado a verdadero 4. Incrementan el performance de la base 5. reduce el trafico en la red. Sintaxis CREATE PROCEDURE nombre_procedimiento AS comienza con todos los comandos sql Para ejecutar se utiliza el comando exec seguido del nombre del SP Muestre el total de las ordenes ingresadas. CREATE PROCEDURE nombre(@numero int) AS SELECT * FROM orders WHERE orderid=@numero EXEC nombre 10248

Calcular la sumatoria total para vinet select sum(freight) from orders where customerid= 'VINET' Para poder hacer las consultas de todos los clientes. create procedure total_peso (@cliente nchar) as select sum(freight) from orders where customerid= @cliente

143

create procedure total_peso (@cliente nchar(5)) as select sum(freight) from orders where customerid= @cliente exec total_peso 'VINET' drop procedure total_peso

Para ejecutar un SP se utiliza el comando: EXEC nombre_SP seguido de los parmetros. Para ver informacin de los SP se utiliza lo siguiente: SP_HELP_SQL SP_HELP SP_HELPTEXT SP_DEPENDS SP_STORE_PROCEDURES Para ver todo el enlistado Herramientas Orientadas a la Web.Usted puede crear pginas web utilizando el asistente de SQL FOR Web o procedimientos almacenados. Herramientas para crear sitios web.-

Cada herramienta presenta una ventaja entre los que tenemos:

1.

El Asistente de SQL Server FOR WEB.- Es una herramienta grfica para crear archivos HTML desde los datos de SQL Server que pueden actualizarse automticamente. 2. Procedimientos almacenados.- Usted puede usar para crear y manejar la generacin de pginas web desde los datos en SQL Server haciendo uso de los siguientes SPs: sp_makewebtask, sp_runwebtask, sp_dropwebtask. Ejecutar una consulta de Base de Datos para el WEB.-

144

Se debe seguir: Escoger la Base de Datos (Nortwind) Ir a Men Herramientas y Asistentes Dentro de Asistentes escogemos Administracin En Administracin escogemos el Asistente para Ayudante de Web y Aceptamos Este Asistente para Ayudante de Web nos permite publicar datos de una tabla SQL Server en una pgina Web. Luego damos un clic en siguiente Escogemos el nombre de la Base de Datos en este caso Nortwind. Luego damos un clic en siguiente. Damos un nombre al trabajo del ayudante de web. Adems seleccionamos que datos deseamos seleccionar en la tabla de la pgina web. En nuestro caso seleccionamos Datos de las tablas y columnas seleccionadas. Luego damos un clic en siguiente Seleccionamos la tabla y columna que deseamos publicar en la pgina web. En nuestro caso escogeremos la tabla EMPLOYEES y las columnas LASTNAME, FIRSTNAME, BIRTHDATE. Luego damos un clic en siguiente Debemos escoger que filas de la tabla deseamos publicar. En nuestro caso como escogimos solo tres daremos en todos. Luego damos un clic en siguiente Para actualizar la pagina en frecuencia de los datos y generacin de la pgina escogeremos en Intervalos regulares programados. Luego damos un clic en siguiente Despus escogeremos el periodo que se desea crear la pagina (semanas, das, horas, minutos) as como la fecha y hora de inicio. Luego damos un clic en siguiente Especificamos el nombre de archivo que deseamos publicar. Luego damos un clic en siguiente Para el formato de la pgina escogemos que si necesitamos dar este formato. Luego damos un clic en siguiente Luego especificamos el ttulo para la pgina web as como el ttulo de la tabla donde contendrn los datos de la pgina web. Luego damos un clic en siguiente Adems escogemos los formatos para los nombres de las columnas con sus caractersticas. Luego damos un clic en siguiente Si deseamos agregar un hipervnculo as como la etiqueta dentro de la pgina web siendo Opcional. Luego damos un clic en siguiente Limitaremos las filas que contendr est pgina. En nuestro caso colocaremos como 20. Luego damos un clic en siguiente Nos aparecer con el asistente que se a completado y adicionalmente nos permite escribir el TRANSACT-SQL que ser guardado en la direccin deseada por el usuario. Luego damos un clic en finalizar. Y para finalizar nos aparecer un mensaje que fue exitoso la ejecucin de la Base de Datos.

Creacin de Usuarios:

145

Nos vamos al Enterprise Manager. Dentro de una base de datos creada, botn derecho, New Database User. En Login Name, desplegamos la ventana que hay, y le damos a nuevo. Sale la ventana de (nuevo usuario) Le damos a new. Sale la pantalla (nuevo login)

Asignacin de permisos Te sitas sobre el usuario y le das clic al botn derecho del ratn propiedades, y entonces aparece una ventana y si le das al boton `Permissions...' te aparece la ventana (permisos). En esa ventana puedes ponerle a cada objeto de la base de datos los permisos que tu creas oportunos que deban tener (SELECT, INSERT, UPDATE, DELETE, EXEC, DRI )

Identificacin de usuarios al acceder a la BD

146

En la parte posterior podemos elegir conectarnos a travs de Windows authentication (Autentificacin de Windows) o a travs de SQL Server authentication (Autentificacin de SQL Server). En la primera, cuando un usuario se conecta a SQL Server, ste ltimo verifica que el nombre y la clave se han validado cuando el usuario se ha conectado a Windows NT/95/98. Si no se encuentra ninguna correspondencia entre las cuentas de NT y los logins de SQL Server, entonces se usa la cuenta guest (invitado). Este usuario no se crea por defecto sino que debe ser aadido para que cualquier usuario que se conecte a SQL y no tenga un usuario asignado ingrese con este usuario. Ahora bien este usuario guest debe tener permisos limitados. Este usuario siempre tiene un uid igual a 2 y contiene los privilegios del grupo public. Copias de Seguridad. Realizacin. Principales parmetros a tener en cuenta. El guardado de una base de datos debe incluir todos los archivos, incluyendo el registro de transacciones, necesarios para la restauracin de los datos en un estado coherente. Las operaciones de guardar y restaurar deben planificarse para responder a todos lo casos. Los puntos ms importantes son: - Guardar las bases de datos de sistema (master, msdb..) y de usuario. La frecuencia de las copias estar en funcin del uso de las bases. - Intentar guardar siempre reduciendo al mnimo el tiempo de restauracin. - Probar la restauracin para validar el guardado. Las copias pueden hacerse de manera dinmica durante el trabajo de los usuarios; con Enterprise Manager o con la instruccin BACKUP. Las copias pueden hacerse sobre las unidades de copia: - Disco - Cintas - Canales con nombre Las unidades de copia pueden ser gestionadas por Enterprise Manager, o por el procedimiento almacenado sp_adddumpdevice. Procesos de backup y restore Polticas de copia de seguridad Los procesos de backup escriben conjuntos de pginas en principio inconsistentes. Para hacerlos consistentes, los backup incluyen el Transaction Log. Las posibles metodologas de copia de seguridad son las siguientes: Backups completos peridicos Se realizan backups peridicos de la base de datos completa. La ventaja es la facilidad de administracin, el inconveniente es que no se garantizan los cambios desde el ltimo backup. Backups completos peridicos con Transaction Log Se realizan backups peridicos de la base de datos completa y con mayor frecuencia, backups del Transaction Log. La realizacin de copias de seguridad del Transaction Log proporciona una gran flexibilidad en la restauracin de bases de datos, ya que permite restaurar la base de datos hasta el instante anterior a que se produjese un error, o hasta un instante determinado del tiempo.

Rendimiento de los procesos de backup Los benchmarkings de SQL Server proporcionan los siguientes resultados en cuanto a procesos de backup:

147

Un backup online consume aproximadamente un 15% de recursos de procesador. Un restore consume un 8%. El ancho de banda utilizado por el backup apenas se ve penalizado por la carga del servidor.

Para incrementar el rendimiento de los procesos de backup pueden tomarse las siguientes medidas: - Incrementar el paralelismo, es decir aumentar el nmero de unidades de cinta. - Balancear velocidades de discos y dispositivos de backup. La velocidad de lectura de disco puede medirse realizando un backup a nul. - No debe compartirse la controladora SCSI entre la unidad de cinta y el disco. - No debe utilizarse compresin hardware si los datos no son comprimibles (p.ej. una base de datos de imgenes) Como realizar una copia de seguridad. Nos vamos al Enterprise Manager. Nos situamos en la base de datos en la cual deseamos realizar una copia de seguridad. Botn derecho del ratn sobre ella, y realizar el procedimiento que aparece a continuacin.

Una vez hecho este proceso, aparece la ventana que se muestra a continuacin.

En dicha ventana, en la pestaa General, detallaremos las opciones que tiene. La Base de Datos a la cual procederemos a realizar una copia de seguridad, que ya viene dada lgicamente, pero que la podemos cambiar.

148

Su nombre, y su descripcin. En Backup seleccionamos el tipo de copia de seguridad, que puede ser completa o diferencial, del transaction log, y file and filegroup, en la cual se eligen las tablas deseadas nicamente. En Destination elegimos la ruta donde queremos guardar la copia. Para este proceso le damos al botn Add . Las opciones que tiene posteriormente es sobrescribir la copia existente, o hacer una nueva. La opcin Schedule es un programador, para realizar las copias cada cierta fecha indicada en el edit. En la pestaa Options detallaremos ahora sus opciones. Su primera casilla es verificar la copia de seguridad una vez completa. La segunda casilla est oculta, y es porque no hay unidades de cinta instaladas. La tercera casilla es que no copie las entradas inactivas o que han sido borradas del transcation log La cuarta casilla es que chequee el nombre y la fecha de expiracin de la copia de seguridad. Su ultima opcin es inicializar y poner una etiqueta a la cinta.

Restauracin de la BD a partir de la copia de seguridad. El proceso de restauracin es el siguiente. En el Enterprise Manager con el botn derecho del ratn, todas las tareas, restore database . Realizada esta accin, aparece la ventana que se muestra aqu.

149

En esta pestaa, viene todo por defecto.

150

Potrebbero piacerti anche