Gestión de Bases de Datos
Gestión de Bases de Datos
Gestión de Bases de Datos
41
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
autor: Jorge Sánchez – www.jorgesanchez.net
índice
Centro Don Bosco
Villamuriel de Cerrato
Esto es un resumen fácilmente legible del Texto Legal (la licencia completa)
http://creGtivecommons.org/licenses/by-nc-sa/3.0/legalcode
@ Compartir bajo la Misma Licencia - Si altera o transforma esta obra, o genera una obra
derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta.
Entendiendo que:
Renuncia - Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de
los derechos de autor
Dominio Público - Cuando la obra o alguno de sus elementos se halle en el dominio público según
la ley vigente aplicable, esta situación no quedará afectada por la licencia.
Otros derechos - Los derechos siguientes no quedan afectados por la licencia de ninguna manera·
• Los derechos derivados de usos legitimos u otras limitaciones reconocidas por ley no se ven
afectados por lo anterior.
• Los derechos morales del auto,
(2) (2)
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
autor: Jorge Sánchez – www.jorgesanchez.net
• Derechos que pueden ostentar otras personas sobre la propia obra o su uso. como por ejemplo
derechos de imaaen o de orivacidad.
(3) (3)
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
autor: Jorge Sánchez – www.jorgesanchez.net
índice
(1) gestión y diseño de bases de datos ............................................................................9
(1.1) datos y archivos 9
(1.1.1) la necesidad de gestionar datos ......................................................................................................... 9
(1.1.2) sistemas de información......................................................................................................................10
(1.1.3) archivos .................................................................................................................................................... 11
(1.1.4) operaciones relacionadas con uso de ficheros en bases de datos............................................. 16
(1.1.5) tipos de sistemas de información...................................................................................................... 17
(1.1.6) utilidad de los sistemas gestores de bases de datos ..................................................................... 19
(1.1.7) niveles de abstracción de una base de datos ............................................................................... 20
(1.2) componentes de los SGBD 21
(1.2.1) funciones. lenguajes de los SGBD ..................................................................................................... 21
(1.2.2) recursos humanos de las bases de datos ....................................................................................... 22
(1.2.3) estructura multicapa ......................................................................................................................... 23
(1.2.4) funcionamiento del SGBD................................................................................................................ 25
(1.3) arquitectura de los SGBD. estándares 25
(1.3.1) organismos de estandarización ........................................................................................................ 25
(1.3.2) ISO/JTC1/SC21/WG3 ............................................................................................................................. 26
(1.3.3) DBTG/Codasyl ..................................................................................................................................... 26
(1.3.4) ANSI/X3/SPARC .................................................................................................................................. 26
(1.3.5) Modelo ANSI/X3/SPARC ....................................................................................................................27
(1.3.6) proceso de creación y manipulación de una base de datos actual ...................................... 30
(1.3.7) formas de ejecución de un SGBD ................................................................................................... 30
(1.4) tipos de SGBD 31
(1.4.1) introducción ........................................................................................................................................... 31
(1.4.2) modelo jerárquico .............................................................................................................................. 32
(1.4.3) modelo en red (Codasyl) .................................................................................................................. 33
(1.4.4) modelo relacional............................................................................................................................... 33
(1.4.5) modelo de bases de datos orientadas a objetos ........................................................................ 34
(1.4.6) bases de datos objeto-relacionales ................................................................................................ 34
(1.4.7) bases de datos NoSQL....................................................................................................................... 34
(1.5) diseño conceptual de bases de datos. el modelo entidad / relación _ 35
(1.5.1) introducción .......................................................................................................................................... 35
(1.5.2) componentes del modelo ................................................................................................................. 35
(1.5.3) relaciones ...............................................................................................................................................37
(1.5.4) atributos................................................................................................................................................40
(4) (4)
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
índice autor: Jorge Sánchez – www.jorgesanchez.net
(5) (5)
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
índice autor: Jorge Sánchez – www.jorgesanchez.net
(6) (6)
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
índice autor: Jorge Sánchez – www.jorgesanchez.net
(4.1) consultas de datos con SQL. DQL 115
(4.1.1) capacidades .......................................................................................................................................... 115
(7) (7)
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
índice autor: Jorge Sánchez – www.jorgesanchez.net
(8) (8)
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
índice autor: Jorge Sánchez – www.jorgesanchez.net
(4.10.1) consultas con ROWNUM ................................................................................................................ 153
(9) (9)
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
índice autor: Jorge Sánchez – www.jorgesanchez.net
(10)(10
)
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
índice autor: Jorge Sánchez – www.jorgesanchez.net
(11)(11)
sistemas gestores de bases de datos 2o curso de administración de sistemas informáticos en red
índice autor: Jorge Sánchez – www.jorgesanchez.net
(5.11.9) orden de ejecución de los triggers ............................................................................................... 208
(5.11.10) problemas con las tablas mutantes ..........................................................................................209
(12)(12
)
(1)
gestión y diseño de
bases de datos
(1.1) datos y archivos
(1.1.1) la necesidad de gestionar datos
En el mundo actual existe una cada vez mayor demanda de datos. Esta demanda
siempre ha sido patente en empresas y sociedades, pero en estos años la demanda todavía
de ha disparado más debido al acceso multitudinario a Internet.
El propio nombre Informática hace referencia al hecho de ser una ciencia que
trabaja con información. Desde los albores de la creación de ordenadores, la
información se ha considerado como uno de los pilares de las computadoras digitales.
Por ello las bases de datos son una de las aplicaciones más antiguas de la informática.
En informática se conoce como dato a cualquier elemento informativo que tenga
relevancia para el sistema. Desde el inicio de la informática se ha reconocido al dato como
al elemento fundamental de trabajo en un ordenador. Por ello se han realizado numerosos
estudios y aplicaciones para mejorar la gestión que desde las computadoras se realiza
de los datos.
Inicialmente los datos que se necesitaba almacenar y gestionar eran pocos, pero
poco a poco han ido creciendo. En la actualidad las numerosas aplicaciones de Internet
han producido enormes sistemas de información que incluso para poder gestionarles
requieren decenas de máquinas haciendo la información accesible desde cualquier parte
del planeta y en un tiempo rápido. Eso ha requerido que la ciencia de las bases de datos
esté en continua renovación para hacer frente a esas enormes necesidades.
Pero incluso podemos remontarnos más al hablar de datos. El ser humano desde
siempre ha necesitado gestionar datos; de esta forma se controlaban almacenes de
alimentos, controles de inventario y otras muchos sistemas de datos. Como herramienta
el ser humano al principio sólo poseía su memoria y cálculo y como mucho la ayuda de
sus dedos.
La escritura fue la herramienta que permitió al ser humano poder gestionar bases cada
vez más grandes de datos. Además de permitir compartir esa información entre diferentes
personas, también posibilitó que los datos se guardaran de manera continua e incluso
estuvieran disponibles para las siguientes generaciones. Los problemas actuales con
la privacidad ya aparecieron con la propia escritura y así el cifrado de
(9)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
datos es una técnica tan antigua como la propia escritura para conseguir uno de los todavía
requisitos fundamentales de la gestión de datos, la seguridad.
Para poder almacenar datos y cada vez más datos, el ser humano ideó nuevas
herramientas archivos, cajones, carpetas y fichas en las que se almacenaban los datos.
Antes de la aparición del ordenador, el tiempo requerido para manipular estos datos
era enorme. Sin embargo el proceso de aprendizaje era relativamente sencillo ya que se
usaban elementos que el usuario reconocía perfectamente.
Por esa razón, la informática adaptó sus herramientas para que los elementos que el
usuario maneja en el ordenador se parezcan a los que utilizaba manualmente. Así en
informática se sigue hablado de ficheros, formularios, carpetas, directorios,....
Hay que hacer notar que cada subsistema se asocia a un departamento concreto de la
empresa.
sistemas de información
Los sistemas que aglutinan los elementos que intervienen para gestionar la información
que manejan los subsistemas empresariales es lo que se conoce como Sistemas de
Información. Se suele utilizar las siglas SI o IS (de Information Server) para referirse a
ello).
Realmente un sistema de información sólo incluye la información que nos interesa de
la empresa y los elementos necesarios para gestionar esa información.
Un sistema de información genérico está formado por los siguientes elementos:
(10)
(10)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(1.1.3) archivos
Los ficheros o archivos son la herramienta fundamental de trabajo en una computadora
todavía a día de hoy. Las computadoras siguen almacenando la información en ficheros,
eso sí de estructura cada vez más compleja.
Los datos deben de ser almacenados en componentes de almacenamiento permanente,
lo que se conoce como memoria secundaria (discos duros u otras unidades de disco). En
esas memorias, los datos se estructuran en archivos (también llamados ficheros).
Un fichero es una secuencia de números binarios que organiza información relacionada
a un mismo aspecto.
En general sobre los archivos se pueden realizar las siguientes operaciones:
Abrir (open). Prepara el fichero para su proceso.
Cerrar (close). Cierra el fichero impidiendo su proceso inmediato.
Leer (read). Obtiene información del fichero.
Escribir (write). Graba información en el fichero.
Posicionarse (seek). Coloca el puntero de lectura en una posición concreta del
mismo (no se puede realizar en todos los tipos de ficheros).
Fin de fichero (eof). Indica si hemos llegado al final del fichero.
Cuando los ficheros almacenan datos, se dice que constan de registros. Cada registro
contiene datos relativos a un mismo elemento u objeto. Por ejemplo en un fichero de
personas, cada registro contiene datos de una persona. Si el archivo contiene datos de
1000 personas, constará de 1000 registros.
A continuación se explican los tipos más habituales de ficheros.
ficheros secuenciales
En estos ficheros, los datos se organizan secuencialmente en el orden en el que fueron
grabados. Para leer los últimos datos hay que leer los anteriores. Es decir leer el
registro número nueve, implica leer previamente los ocho anteriores.
(11)(11)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
ventajas
Rápidos para obtener registros contiguos de una base de datos
No hay huecos en el archivo al grabarse los datos seguidos, datos más
compactos.
desventajas
Consultas muy lentas al tener que leer todos los datos anteriores al dato que
queremos leer
Algoritmos de lectura y escritura más complejos
No se pueden eliminar registros del fichero (se pueden marcar de manera
especial para que no sean tenidos en cuenta, pero no se pueden borrar)
El borrado provoca archivos que no son compactos
La ordenación de los datos requiere volver a crearle de nuevo
ficheros de acceso directo o aleatorio
Se puede leer una posición concreta del fichero, con saber la posición (normalmente en
bytes) del dato a leer. Cuando se almacenan registros, posicionarnos en el quinto
registro se haría de golpe, lo único necesitamos saber el tamaño del registro, que en
este tipo de ficheros debe de ser el mismo. Suponiendo que cada registro ocupa 100 bytes,
el quinto registro comienza en la posición 400. Lo que se hace es colocar el llamado
puntero de archivo en esa posición y después leer.
(12)
(12)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
Aptos para organizaciones
relativas directas, en las que la clave del registro se
relaciona con su posición en el archivo
(13)
(13)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
desventajas
Salvo en archivos relativos directos, no es apto por sí mismo para usar en bases
de datos, ya que los datos se organizan en base a una clave
No se pueden borrar datos (sí marcar para borrado, pero generarán huecos)
Las consultas sobre multitud de registros son más lentas que en el caso
anterior.
ficheros secuenciales encadenados
Son ficheros secuenciales gestionados mediante punteros, datos especiales que
contienen la dirección de cada registro del fichero. Cada registro posee ese puntero que
indica la dirección del siguiente registro y que se puede modificar en cualquier
momento. El puntero permite recorrer los datos en un orden concreto.
Cuando aparece un nuevo registro, se añade al final del archivo, pero los punteros se
reordenan para que se mantenga el orden.
(14)
(14)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
desventajas
No se borran los registros, sino que se marcan para ser ignorados. Por lo que se
malgasta espacio
Añadir registros o modificar las claves son operaciones que requieren recalcular
los punteros
ficheros secuenciales indexados
Se utilizan dos ficheros para los datos, uno posee los registros almacenados de forma
secuencial, pero que permite su acceso aleatorio. El otro posee una tabla con punteros
a la posición ordenada de los registros. Ese segundo fichero es el índice, una tabla con
la ordenación deseada para los registros y la posición que ocupan en el archivo.
El archivo de índices posee unas cuantas entradas sólo en las que se indica la
posición de ciertos valores claves en el archivo (cada 10, 15 ,20,... registros del archivo
principal se añade una entrada en el de índices). El archivo principal tiene que estar
siempre ordenado y así cuando se busca un registro, se busca su valor clave en la tabla
de índices, la cual poseerá la posición del registro buscado. Desde esa posición se busca
secuencialmente el registro hasta encontrarlo.
Existe un archivo llamado de desbordamiento u overflow en el que se colocan los
nuevos registros que se van añadiendo (para no tener que ordenar el archivo principal
cada vez que se añade un nuevo registro) este archivo está desordenado. Se utiliza sólo
si se busca un registro y no se encuentra en el archivo principal. En ese caso se recorre
todo el archivo de overflow hasta encontrarlo.
Para no tener demasiados archivos en overflow (lo que restaría velocidad), cada cierto
tiempo se reorganiza el archivo principal. Ejemplo:
(15)
(15)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
ventajas
El archivo está siempre ordenado en base a una clave
La búsqueda de datos es rapidísima
Permite la lectura secuencial (que además será en el orden de la clave)
El borrado de registros es posible (aunque más problemático que en el caso
anterior)
desventajas
Para un uso óptimo hay que reorganizar el archivo principal y esta operación es
muy costosa ya que hay que reescribir de nuevo y de forma ordenada todo el
archivo.
La adición de registros requiere más tiempo que en los casos anteriores al tener
que reordenar los índices
ficheros indexado-encadenados
Utiliza punteros e índices, es una variante encadenada del caso anterior. Hay un fichero
de índices equivalente al comentado en el caso anterior y otro fichero de tipo encadenado
con punteros a los siguientes registros. Cuando se añaden registros se añaden en un
tercer registro llamado de desbordamiento u overflow. En ese archivo los datos se
almacenan secuencialmente, se accede a ellos si se busca un dato y no se encuentra en la
tabla de índices.
(16)
(16)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
ventajas
Posee las mismas ventajas que los archivos secuenciales indexados, además de
una mayor rapidez al reorganizar el fichero (sólo se modifican los punteros)
desventajas
Requieren compactar los datos a menudo para reorganizar índices y quitar el
fichero de desbordamiento.
Por ello se requiere compactar los datos. Esta técnica permite eliminar los huecos
interiores a un archivo. Las formas de realizarla son:
Reescribir el archivo para eliminar los huecos. Es la mejor, pero lógicamente
es la más lenta al requerir releer y reorganizar todo el contenido del fichero.
Aprovechar huecos. De forma que los nuevos registros se inserten en esos
huecos. Esta técnica suele requerir un paso previo para reorganizar esos
huecos.
compresión de datos
En muchos casos para ahorrar espacio de almacenamiento, se utilizan técnicas de
compresión de datos. La ventaja es que los datos ocupan menos espacio y la desventaja
es que al manipular los datos hay que descomprimirlos lo que hace que la manipulación
de los datos sea lenta.
cifrado de datos
Otra de las opciones habituales sobre ficheros de datos es utilizar técnicas de cifrado para
proteger los ficheros en caso de que alguien no autorizado se haga con el fichero. Para
leer un fichero de datos, haría falta descifrar el fichero. Para descifrar necesitamos
una clave o bien aplicar métodos de descifrado; lógicamente cuanto mejor sea la técnica
de cifrado, más difícil será descifrar los datos mediante la fuerza bruta.
(17)
(17)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(18)
(18)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
A estos sistemas se les llama sistemas de gestión de ficheros. Se consideran también así
a los sistemas que utilizan programas ofimáticos (como Word o Excel por ejemplo) para
gestionar sus datos (muchas pequeñas empresas utilizan esta forma de administrar sus
datos). De hecho estos sistemas producen los mismos (si no más) problemas.
sistemas de información orientados a los datos. bases de datos
En este tipo de sistemas los datos se centralizan en una base de datos común a todas
las aplicaciones. Estos serán los sistemas que estudiaremos en este curso.
En esos sistemas los datos se almacenan en una única estructura lógica que es utilizable
por las aplicaciones. A través de esa estructura se accede a los datos que son comunes a
todas las aplicaciones.
Cuando una aplicación modifica un dato, dicho dato la modificación será visible para
el resto de aplicaciones.
(19)
(19)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
desventajas
Instalación costosa. El control y administración de bases de datos requiere de
un software y hardware poderoso
Requiere personal cualificado. Debido a la dificultad de manejo de este tipo
de sistemas.
Implantación larga y difícil. Debido a los puntos anteriores. La adaptación del
personal es mucho más complicada y lleva bastante tiempo.
Ausencia de estándares reales. Lo cual significa una excesiva dependencia
hacia los sistemas comerciales del mercado. Aunque, hoy en día, una buena parte
de esta tecnología está aceptada como estándar de hecho.
DBMS
(20)
(20)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
Realmente la base de datos es la misma, pero se la puede observar desde estos dos puntos
de vista. Al igual que una casa se la pueda observar pensando en los materiales concretos
con los que se construye o bien pensando en ella con el plano en papel.
En todo sistema de información digital, los usuarios ven los datos desde las aplicaciones
creadas por los programadores. A ese nivel se manejan formularios, informes en
pantalla o en papel,...
Pero la realidad física de esos datos, tal cual se almacenan en los discos queda
oculta a los usuarios. Esa forma de ver la base de datos está reservada a los
administradores. Es el nivel físico el que permite ver la base de datos en función de
cómo realmente se están almacenando en el ordenador, en qué carpeta, qué archivos se
usan,…
En el caso de los Sistemas de Base de datos, se añade un tercer nivel, un tercer
punto de vista, es el nivel conceptual. Ese nivel se sitúa entre el físico y el externo.
En cada nivel se manejan esquemas de la base de datos, al igual que al construir una
casa, los distintos profesionales manejan distintos tipos de planos (eléctricos, de
albañilería, de tuberías de agua,…). Con lo cual una base de datos requiere diseñar al
menos tres esquemas (en realidad son más).
esquema físico
Representa la forma en la que están almacenados los datos. Esta visión sólo la requiere
el administrador/a. El administrador la necesita para poder gestionar más eficientemente
la base de datos.
En este esquema se habla de archivos, directorios o carpetas, unidades de disco,
servidores,…
esquema conceptual
Se trata de un esquema teórico de los datos en el que figuran organizados en
estructuras reconocibles del mundo real y en el que también aparece la forma de
relacionarse los datos. Este esquema es el paso que permite modelar un problema real a
su forma correspondiente en el ordenador.
Este esquema es la base de datos de todos los demás. Como se verá más adelante, es
el primer paso a realizar al crear una base de datos. En definitiva es el plano o modelo
(21)
(21)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(22)
(22)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
Modificar datos
Buscar datos
(23)
(23)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
Núcleo
Sistema Operativo
Datos
(24)
(24)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
facilidades de usuario
Son las herramientas que proporciona el SGBD a los usuarios para permitir un acceso
más sencillo a los datos. Actúan de interfaz entre el usuario y la base de datos, y son el
único elemento que maneja el usuario. Son, en definitiva, las páginas web y las
aplicaciones con las que los usuarios manejan la base de datos. Permite abstraer la
realidad de la base de datos a las usuarias y usuarios, mostrando la información de una
forma más humana.
capa de acceso a datos
La capa de acceso a datos es la que permite comunicar a las aplicaciones de usuario con
el diccionario de datos. Es un software (un driver o controlador en realidad) que se encarga
traducir las peticiones del usuario para que lleguen de forma correcta a la base de datos
y ésta pueda responder de forma adecuada.
diccionario de datos
Se trata del elemento que posee todos los metadatos. Gracias a esta capa las solicitudes
de los clientes (que son conceptuales antes de llegar aquí) se traducen en instrucciones
que hacen referencia al esquema interno de la base de datos.
núcleo
El núcleo de la base de datos es la encargada de traducir todas las instrucciones requeridas
y prepararlas para su correcta interpretación por parte del sistema. Realiza la traducción
física de las peticiones.
sistema operativo
Es una capa externa al software SGBD pero es la única capa que realmente accede a los
datos en sí. En realidad los SGBD no acceden directamente al disco, sino que piden al
Sistema Operativo que lo haga.
(25)
(25)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(4) El proceso lanzado por el usuario llama al SGBD indicando la porción de la base
de datos que se desea tratar
(5) El SGBD traduce la llamada a términos del esquema lógico de la base de datos.
Accede al esquema lógico comprobando derechos de acceso y la traducción
física (normalmente los metadatos se guardan una zona de memoria global y no
en el disco)
(6) El SGBD obtiene el esquema físico
(7) El SGBD traduce la llamada a los métodos de acceso del Sistema Operativo que
permiten acceder realmente a los datos requeridos
(8) El Sistema Operativo accede a los datos tras traducir las órdenes dadas por el
SGBD
(9) Los datos pasan del disco a una memoria intermedia o buffer. En ese buffer se
almacenarán los datos según se vayan recibiendo
(10) Los datos pasan del buffer al área de trabajo del usuario (ATU) del proceso del
usuario. Los pasos 6 y 7 se repiten hasta que se envíe toda la información al
proceso de usuario.
(11) En el caso de que haya errores en cualquier momento del proceso, el SGBD
devuelve indicadores en los que manifiesta si ha habido errores o advertencias
a tener en cuenta. Esto se indica al área de comunicaciones del proceso de
usuario. Si las indicaciones son satisfactorias, los datos de la ATU serán utilizables
por el proceso de usuario.
(26)
(26)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(1.3.2) ISO/JTC1/SC21/WG3
ISO (International Organization for Standardization). Es un organismo
internacional de definición de estándares de gran prestigio.
IEC (International Electrotechnical Commission). Organismo de definición de
normas en ambientes electrónicos. Es la parte, en definitiva de ISO, dedicada a
la creación de estándares.
JTC 1 (Joint Technical Committee). Comité parte de IEC dedicado a la
tecnología de la información (informática). En el campo de las bases de datos,
el subcomité SC 21 (en el que participan otros organismos nacionales, como el
español AENOR) posee un grupo de trabajo llamado WG 3 que se dedica a las
bases de datos. Este grupo de trabajo es el que define la estandarización del
lenguaje SQL entre otras cuestiones.
Entre los trabajos que realiza el grupo WG3 está la normalización de SQL, además de otras
normas de estandarización.
(1.3.3) DBTG/Codasyl
Codasyl (COnference on DAta SYstem Languages) es el nombre de una conferencia
iniciada en el año 1959 y que dio lugar a un organismo con la idea de conseguir un lenguaje
estándar para la mayoría de máquinas informáticas. Participaron organismos privados y
públicos del gobierno de Estados Unidos con la finalidad de definir estándares. Su
primera tarea fue desarrollar el lenguaje COBOL y otros elementos del análisis, diseño y
la programación de ordenadores.
La tarea real de estandarizar esos lenguajes se la cedieron al organismo ANSI, pero
las ideas e inicios de muchas tecnologías se idearon en el consorcio Codasyl.
En 1967 se crea un grupo de tareas para bases de datos (Data Base Task Group) y
este grupo definió el modelo en red de bases de datos y su integración con COBOL. A
este modelo en red se le denomina modelo Codasyl o modelo DBTG y fue finalmente
aceptado por la ANSI.
(1.3.4) ANSI/X3/SPARC
ANSI (American National Standards Institute) es un organismo científico de Estados
Unidos que ha definido diversos estándares en el campo de las bases de datos. X3 es la
parte de ANSI encargada de los estándares en el mundo de la electrónica. Finalmente
SPARC, System Planning and Repairments Committee, comité de planificación de
sistemas y reparaciones es una subsección de X3 encargada de los estándares en
Sistemas Informáticos en especial del campo de las bases de datos. Su logro
fundamental ha sido definir un modelo de referencia para las bases de datos (que se
estudiará posteriormente).
(27)
(27)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
En la actualidad ANSI para Estados Unidos e ISO para todo el mundo son nombres
equivalentes en cuanto a estandarización de bases de datos, puesto que se habla ya de un
único modelo de sistema de bases de datos.
(28)
(28)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(29)
(29)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(30)
(30)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(31)
(31)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
No obstante existen modelos lógicos comunes, ya que hay SGBD de diferentes tipos. En
la realidad el modelo ANSI se modifica para que existan dos modelos internos: el modelo
lógico (referido a cualquier SGBD de ese tipo) y el modelo propiamente interno
(32)
(32)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(33)
(33)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
Departamento
Documentos Personal
Tareas
Este esquema está en absoluto desuso ya que no es válido para modelar la mayoría de
problemas de bases de datos.
(34)
(34)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(35)
(35)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(36)
(36)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
Pedro
Ana
José
Entidades
PERSONAS
María
Consuelo
Jaime
Conjunto de Lourdes
entidades
PERSONAS
Ilustración 17, Representación de
la entidad persona
tipos de entidades
Regulares. Son las entidades normales que tienen existencia por sí mismas sin
depender de otras. Su representación gráfica es la indicada arriba
Débiles. Su existencia depende de otras. Es decir e. Por ejemplo la entidad
tarea laboral sólo podrá tener existencia si existe la entidad trabajo. Las
entidades débiles se presentan de esta forma:
(37)
(37)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
TAREAS LABORALES
Ilustración 18, Entidad débil
(1.5.3) relaciones
qué es una relación
Representan asociaciones entre entidades. Es el elemento del modelo que permite
relacionar en sí los datos del mismo. Por ejemplo, en el caso de que tengamos una entidad
personas y otra entidad trabajos. Ambas se realizan ya que las personas trabajan
y los trabajos son realizados por personas:
PERSONAS TRABAJOS
Pedro Fontanero
José
María Peluquero
Consuelo
Administrativo
Jaime
Lourdes
En una relación (Chen llamaba conjunto de relaciones a lo que ahora se llama relación a
secas) cada ejemplar (relación en la terminología de Chen) asocia un elemento de una
entidad con otro de la otra entidad. En una relación no pueden aparecer dos veces
relacionados los mismos ejemplares. Es decir en el ejemplo anterior, en la relación no
puede aparecer dos veces el mismo trabajador asociado al mismo trabajo.
representación gráfica
La representación gráfica de las entidades se realiza con un rombo al que se le unen líneas
que se dirigen a las entidades, las relaciones tienen nombre (se suele usar un verbo). En
el ejemplo anterior podría usarse como nombre de relación, trabajar:
(38)
(38)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
ejemplos de relaciones
CURSOS IMPARTIR AULAS CURSOS IMPARTIR AULAS
DIAS
SER
CAPITAL
COMPONER
LOCALIDADES CAPITALES
PERTENECER PIEZAS
(39)
(39)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(0,1)
TRABAJADORES TRABAJAR
(1,n)
empleado
Ilustración 22, Ejemplo de rol. Un trabajador
puede ser visto como jefe o como empleado según
a qué lado de la relación esté
(40)
(40)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(1.5.4) atributos
Describen propiedades de las entidades y las relaciones. En este modelo se representan
con elipses, dentro de las cuales se coloca el nombre del atributo. Esa elipse se une con
una línea a las entidades. Ejemplo:
tipos de atributos
compuesto
día
fecha mes
año
múltiples
Pueden tomar varios valores (varios teléfonos para el mismo cliente):
CLIENTES
(1,n)
teléfono
opcionales
Lo son si pueden tener valor nulo:
CLIENTES
(0,1)
teléfono
identificador o clave
Se trata de uno o más atributos de una entidad cuyos valores son únicos en cada
ejemplar de la entidad. Se marcan en el esquema subrayando el nombre del identificador.
(41)
(41)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
Para que un atributo sea considerado un buen identificador tiene que cumplir con los
siguientes requisitos:
(4) Deben distinguir a cada ejemplar de la entidad o relación. Es decir no puede
haber dos ejemplares con el mismo valor en el identificador.
(5) Todos los ejemplares de una entidad deben tener el mismo identificador.
(6) Un identificador puede estar formado por más de un atributo.
(7) Puede haber varios identificadores candidatos, en ese caso hay que elegir el que
tenga más importancia en nuestro sistema (el resto pasan a ser alternativos).
Todas las entidades deben de tener un identificador, en el caso de que una entidad no
tenga identificador en sus atributos (puede ocurrir, pero hay que ser cauteloso, a veces
se trata de entidades que están mal modeladas) entonces hay que añadir un atributo
que haga de identificador. El nombre de este atributo artificial es la palabra id seguida
del nombre de la entidad. Por ejemplo id_personas.
identificador alternativo
Se trata de uno o más campos cuyos valores son únicos para cada ejemplar de una entidad,
pero que no son identificadores ya que existen identificadores mejores en la entidad. En
este caso los candidatos es aconsejable marcarlos con un subrayado discontinuo (ejemplo
de subrayado discontinuo)
(42)
(42)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
En la práctica se manejan casi igual ambas; la forma clásica de representar una ISA es:
En general se suelen indicar las cardinalidades en las relaciones ISA, pero se suele
sobreentender (cuando no se indican explícitamente) que hay un (0,1) encima de cada
subentidad (que significa que cada ejemplar de la subentidad solo puede relacionarse
como mucho con uno de la subentidad e incluso con ninguno; un empleado de personal
podría ser o no ser un profesor).
Pero se puede perfectamente indicar la cardinalidad (se usa ya la notación de ISA
con triángulo hacia abajo que es la más popular en España actualmente):
De hecho cualquier cardinalidad sería válida (aunque lo normal es que solo aparezcan
ceros y unos).
(43)
(43)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
En la ilustración anterior se utiliza una clave distinta para cada subentidad (es decir,
discos, libros y merchandising tienen clave propia), no la heredan.
Es posible tener esta situación incluso (aunque no es muy habitual):
(44)
(44)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
Ilustración
(unidad 1) gestión y diseño28, Discos,
de bases datos y Merchandising no seautor:
de Libros Jorge Sánchez – www.jorgesanchez.net
relacionan
obligatoriamente con la superentidad Artículos
(45)
(45)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
Ilustración 29, A la derecha el mismo gráfico Entidad Relación sin indicar las cardinalidades. Se
sobrentiende que son las de la izquierda
exclusividad
En las relaciones ISA (y también en otros tipos de relaciones) se puede indicar el hecho de
que cada ejemplar sólo puede participar en una de entre varias ramas de una relación.
Este hecho se marca con un arco entre las distintas relaciones. En las relaciones
ISA se usa mucho, por ejemplo:
En el ejemplo, el personal sólo puede ser o bedel, o profesor o técnico; una y sólo una
de las tres cosas (es por cierto la forma más habitual de relación ISA).
(46)
(46)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
La forma gráfica más aceptada actualmente para representar este tipo de relaciones,
sería la siguiente:
(47)
(47)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
Todos los posibles ejemplos de relaciones ISA atendiendo a la cardinalidad son los
expuestos en la Ilustración 31
entidades débiles
Ya se ha comentado antes que una entidad débil es aquella cuya existencia depende de
otra. Ahora vamos a clarificar más estas entidades. Efectivamente ocurren cuando hay una
entidad más fuerte de la que dependen. Lógicamente tienen relación con esa entidad. En
la forma clásica se representaría de esta forma:
En el diagrama la relación entre las tareas y los trabajos es 1 a n (cada trabajo se compone
de n tareas). Una tarea obligatoriamente está asignada a un trabajo, es más no tiene
sentido hablar de tareas sin hablar del trabajo del que forma parte.
(48)
(48)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 1) gestión y diseño de bases de datos autor: Jorge Sánchez – www.jorgesanchez.net
(49)
(49)
(2)
bases de datos
relacionales
(2.1) el modelo relacional
(2.1.1) introducción
Edgar Frank Codd definió las bases del modelo relacional a finales de los 60. En 1970
publica el documento “A Relational Model of data for Large Shared Data Banks”
(“Un modelo relacional de datos para grandes bancos de datos compartidos”).
Actualmente se considera que ese es uno de los documentos más influyentes de toda la
historia de la informática. Lo es porque en él se definieron las bases del llamado Modelo
Relacional de Bases de Datos. Anteriormente el único modelo teórico estandarizado era
el Codasyl que se utilizó masivamente en los años 70 como paradigma del modelo en
red de bases de datos.
Codd se apoya en los trabajos de los matemáticos Cantor y Childs (cuya teoría de
conjuntos es la verdadera base del modelo relacional). Según Codd los datos se agrupan
en relaciones (actualmente llamadas tablas) que es un concepto que se refiere a la
estructura que aglutina datos referidos a una misma entidad de forma independiente
respecto a su almacenamiento físico.
Lo que Codd intentaba fundamentalmente es evitar que las usuarias y usuarios de la
base de datos tuvieran que verse obligadas a aprender los entresijos internos del
sistema. Pretendía que los usuarios/as trabajaran de forma sencilla e independiente del
funcionamiento físico de la base de datos en sí. Fue un enfoque revolucionario.
Aunque trabajaba para IBM, esta empresa no recibió de buen grado sus
teorías (de hecho continuó trabajando en su modelo en red IMS). De hecho
fueron otras empresas (en especial Oracle) las que implementaron sus teorías.
Pocos años después el modelo se empezó a utilizar cada vez más, hasta
finalmente ser el modelo de bases de datos más popular. Hoy en día casi todas
las bases de datos siguen este modelo.
(49)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
(2.1.2) objetivos
Codd perseguía estos objetivos con su modelo:
Independencia física. La forma de almacenar los datos, no debe influir en su
manipulación lógica. Si la forma de almacenar los datos cambia, los usuarios no
tienen siquiera porque percibirlo y seguirán trabajando de la misma forma con
la base de datos. Esto permite que los usuarios y usuarias se concentren en qué
quieren consultar en la base de datos y no en cómo está realizada la misma.
Independencia lógica. Las aplicaciones que utilizan la base de datos no deben
ser modificadas porque se modifiquen elementos de la base de datos. Es decir,
añadir, borrar y suprimir datos, no influye en las vistas de los usuarios. De una
manera más precisa, gracias a esta independencia el esquema externo de la
base de datos es realmente independiente del modelo lógico.
Flexibilidad. La base de datos ofrece fácilmente distintas vistas en función de
los usuarios y aplicaciones.
Uniformidad. Las estructuras lógicas siempre tienen una única forma
conceptual (las tablas).
Sencillez. Facilidad de manejo (algo cuestionable, pero ciertamente verdadero
si comparamos con los sistemas gestores de bases de datos anteriores a este
modelo).
(5050
(50)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Año Hecho
1984 Aparece la base de datos Sybase que llegó a ser la
segunda más popular (tras Oracle)
1986 ANSI normaliza el SQL (SQL/ANSI). SQL es ya de hecho el
lenguaje principal de gestión de bases de datos
relacionales.
1987 ISO también normaliza SQL. Es el SQL ISO(9075)
1988 La versión 6 de Oracle incorpora el lenguaje
procedimental PL/SQL
1989 ISO revisa el estándar y publica el estándar SQL Addendum.
Microsoft y Sybase desarrollan SQL Server para el sistema
operativo OS/2 de Microsoft e IBM. Durante años Sybase y
SQL Server fueron el mismo producto.
(5151)
(51)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
(2.2.2) tupla
Cada una de las filas de la relación. Se corresponde con la idea clásica de registro.
Representa por tanto cada elemento individual de esa relación. Tiene que cumplir que:
Cada tupla se debe corresponder con un elemento del mundo real.
No puede haber dos tuplas iguales (con todos los valores iguales).
(5252
(52)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
(2.2.3) dominio
Un dominio contiene todos los posibles valores que puede tomar un determinado atributo.
Dos atributos distintos pueden tener el mismo dominio.
Un dominio en realidad es un conjunto finito de valores del mismo tipo. A los
dominios se les asigna un nombre y así podemos referirnos a ese nombre en más de un
atributo, facilitando la definición de los mismos.
La forma de indicar el contenido de un dominio se puede hacer utilizando dos
posibles técnicas:
Intensión. Se define el nomino indicando la definición exacta de sus posibles
valores. Por intensión se puede definir el dominio de edades de los
trabajadores como: números enteros entre el 16 y el 65 (un trabajador sólo
podría tener una edad entre 16 y 65 años).
Extensión. Se indican algunos valores y se sobreentiende el resto gracias a que
se autodefinen con los anteriores. Por ejemplo el dominio localidad se podría
definir por extensión así: Palencia, Valladolid, Villamuriel de Cerrato,...
Además pueden ser:
Generales. Los valores están comprendidos entre un máximo y un mínimo
Restringidos. Sólo pueden tomar un conjunto de valores
(2.2.4) grado
Indica el tamaño de una relación en base al número de columnas (atributos) de la
misma. Lógicamente cuanto mayor es el grado de una relación, mayor es su complejidad
al manejarla.
(2.2.5) cardinalidad
Número de tuplas de una relación, o número de filas de una tabla.
(2.2.6) sinónimos
Los términos vistos anteriormente tienen distintos sinónimos según la nomenclatura
utilizada. A ese respecto se utilizan tres nomenclaturas:
(5353
(53)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
i 1
donde n es el grado.
Cuerpo de la relación. Representa el conjunto de m tuplas {t1, t2,... tn} que
forman la relación. Cada tupla es un conjunto de n pares atributo-valor
Ai:V ij , donde Vij es el valor j del dominio Di asociado al atributo Ai.
Esquema de la relación. Se forma con el nombre R y la cabecera. Es decir:
R Ai:D i
n
i 1
Ejemplo:
Clientes
DNI Nombre Edad
12333944C Ana 52
12374678G Eva 27
28238232H Martín 33
Esquema: Cliente(DNI:DNI, Nombre:Nombre, Edad:Edad)
Cuerpo: {(DNI: “12333944C”, Nombre:”Ana”, Edad:52), (DNI: “12374678G”,
Nombre:”Eva”, Edad;52), (DNI: “28238232H”, Nombre:”Martín”,Edad:33)}
(5454
(54)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
(2.2.10) claves
clave candidata
Conjunto de atributos que identifican unívocamente cada tupla de la relación. Es decir
columnas cuyos valores no se repiten en ninguna otra tupla de esa tabla. Toda tabla en
el modelo relacional debe tener al menos una clave candidata (puede incluso haber
más)
clave primaria
Clave candidata que se escoge como identificador de las tuplas. Se elige como primaria
la candidata que identifique mejor a cada tupla en el contexto de la base de datos.
Por ejemplo un campo con el DNI sería clave candidata de una tabla de clientes, si esa
tabla tiene un campo de código de cliente, éste sería mejor candidato (y por lo tanto
clave principal) porque es mejor identificador para ese contexto.
clave alternativa
Cualquier clave candidata que no sea primaria.
(5555
(55)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Equipo Nº Equipo
Real Madrid 1
F.C. Barcelona 2
Athletic Bilbao 3
En la tabla anterior la clave principal es el atributo nº equipo. En otra tabla tenemos:
El atributo Nº Equipo sirve para relacionar el Jugador con el equipo al que pertenece. Ese
campo en la tabla de jugadores es una clave secundaria.
(2.2.11) nulos
En los lenguajes de programación se utiliza el valor nulo para reflejar que un identificador
(una variable, un objeto,..) no tiene ningún contenido. Por ejemplo cuando un
puntero en lenguaje C señala a null se dice que no está señalando a nadie. Al programar
en esos lenguajes se trata de un valor que no permite utilizarse en operaciones aritméticas
o lógicas.
Las bases de datos relacionales permiten más posibilidades para el valor nulo (null),
aunque su significado no cambia: valor vacío. No obstante en las bases de datos se
utiliza para diversos fines.
En claves secundarias indican que el registro actual no está relacionado con ninguno.
En otros atributos indica que la tupla en cuestión carece de dicho atributo: por ejemplo
en una tabla de personas un valor nulo en el atributo teléfono indicaría que dicha persona
no tiene teléfono.
Es importante indicar que el texto vacío ‘ ’, no significa lo mismo en un texto que el
nulo; como tampoco el valor cero significa nulo.
Puesto que ese valor se utiliza continuamente, resulta imprescindible saber cómo actúa
cuando se emplean operaciones lógicas sobre ese valor. Eso significa definir un tercer
valor en la lógica booleana, además de los clásicos verdadero y falso. Un valor nulo no es
ni verdadero ni falso (se suele interpretar como un quizás, o usando la aritmética clásica
en valores lógicos, el 1 es verdadero, el 0 falso y el 0,5 nulo).
(5656
(56)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Se utiliza un operador en todas las bases relacionales llamado es nulo (is null) que
devuelve verdadero si el valor con el que se compara es nulo.
(2.3) restricciones
Se trata condiciones de obligado cumplimiento por las tuplas de la base de datos. Las
hay de varios tipos.
(2.3.1) inherentes
Son aquellas que no son determinadas por los usuarios, sino que son definidas por el hecho
de que la base de datos sea relacional. Las más importantes son:
No puede haber dos tuplas iguales
El orden de las tuplas no es significativo
El orden de los atributos no es significativo
Cada atributo sólo puede tomar un valor en la tupla y dominio en el que está
inscrito
(2.3.2) semánticas
El modelo relacional permite a los usuario incorporar restricciones personales a los
datos. Se comentan las diferentes reglas semánticas a continuación:
clave principal (primary key)
También llamada clave primaria. Marca uno o más atributos como identificadores de la
tabla. De esa forma en esos atributos las filas de la tabla no podrán repetir valores ni
tampoco dejarlos vacíos.
unicidad (unique)
Impide que los valores de los atributos marcados de esa forma, puedan repetirse. Esta
restricción debe indicarse en todas las claves alternativas.
Al marcar una clave primaria se añade automáticamente sobre los atributos que
forman la clave un criterio de unicidad.
obligatoriedad (not null)
Prohíbe que el atributo marcado de esta forma quede vacío (es decir impide que pueda
contener el valor nulo, null).
(5757
(57)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Clave principal
Clave secundaria Clave principal
(5858
(58)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
disparadores o triggers
Se trata de pequeños programas grabados en la base de datos que se ejecutan
automáticamente cuando se cumple una determinada condición. Sirven para realizar
una serie de acciones cuando ocurre un determinado evento (cuando se añade una
tupla, cuando se borra un dato, cuando un usuario abre una conexión…)
Los triggers permiten realizar restricciones muy potentes; pero son las más difíciles
de crear.
(5959
(59)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
(606
(60)
0)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
(6161
(61)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
(6262
(62)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo
1
Clave relacional autor: Jorge
externa, clave ajena, clave foránea, clave secundaria Sánchezkey
y foreign – www.jorgesanchez.net
son sinónimos
(6363
(63)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
(6464
(64)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Ilustración 41, Paso a relacional de relaciones cero a cero, suponiendo que son los ejemplares de la
entidad 2, los que más aparecen en la relación. El Identificador 2 pasa con restricción de unicidad.
relaciones recursivas
Las relaciones recursivas se tratan de la misma forma que las otras, sólo que hay que
imaginar que la tabla se divide en dos, una por cada rol. Teniendo en cuenta eso, la
solución es idéntica a lo ya resuelto en los casos anteriores.
(6565
(65)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Ilustración 43, Abstracción para facilitar la conversión de relaciones recursivas, nos imaginamos
dos entidades en lugar de una.
(6666
(66)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
(6767
(67)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) PIEZA(Tipo,
modelo relacional
Modelo,
Nombre, Apellido1, Apellido2)autor: Jorge Sánchez – www.jorgesanchez.net
(6868
(68)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
En ese tipo de esquemas es difícil ver las relaciones en los datos, algo que sí se ve muy
bien en los esquemas entidad relación. Por ello se suelen complementar los esquemas
clásicos con líneas y diagramas que representan esa información.
(6969
(69)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
De hecho es una mezcla entre los esquemas relacionales y los entidad/relación. Hoy en
día se utiliza mucho, en especial por las herramientas CASE de creación de diseños de
bases de datos.
En el diagrama anterior (Ilustración 46) se puede examinar un modelo sencillo estilo
pata de gallo. En estos diagramas la cardinalidad máxima n se dibuja con las famosas
patas de gallo ( ), la cardinalidad mínima de tipo cero con un círculo y la cardinalidad
de tipo uno con una barra vertical. El hecho de que suministros y existencias tengan
las esquinas redondeadas es para remarcar que representan relaciones entre entidades.
En cualquier caso tampoco hay un estándar unánimemente aceptado para este tipo
de notación.
estilo Access
Se ha hecho muy popular la forma de presentar esquemas relacionales del programa
Microsoft Access.
Ejemplo:
(7070
(70)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Además los campos que están el final de una flecha son claves secundarias.
(7171)
(71)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Ilustración 48, Esquema relacional usando notación en pata de gallo con las restricciones
usando abreviaturas
En este caso los símbolos PK significan Primary Key (clave principal), FK es Foreign
Key (clave secundaria) UK (o simplemente U) es Unique (unicidad) y CK es restricción
de validación (check). Los números sirven para aclarar los atributos que forman parte
de la restricción. Así sabemos que en la tabla de prestamos, dni forma una clave
foránea y n_copia otra distinta; y que fecha_prestamo, dni y n_copia forman juntos una
restricción de unicidad.
(2.7) normalización
(2.7.1) problemas del esquema relacional
Una vez obtenido el esquema relacional resultante del esquema entidad/relación que
representa la base de datos, normalmente tendremos una buena base de datos. Pero otras
veces, debido a fallos en el diseño o a problemas indetectables, tendremos un esquema
que puede producir una base de datos que incorpore estos problemas:
Redundancia. Se llama así a los datos que se repiten continua e
innecesariamente por las tablas de las bases de datos. Cuando es excesiva es
evidente que el diseño hay que revisarlo, es el primer síntoma de problemas y
se detecta fácilmente.
Ambigüedades. Datos que no clarifican suficientemente el elemento al que
representan. Los datos de cada fila podrían referirse a más de un ejemplar de esa
(7272
(72)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional
tabla o incluso
puede ser autor:
imposible saber a qué Jorge Sánchez
ejemplar – www.jorgesanchez.net
exactamente se están
refiriendo. Es un problema muy grave y difícil de detectar.
(7373
(73)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
El principio fundamental reside en que las tablas deben referirse a objetos o situaciones
muy concretas, relacionados exactamente con elementos reconocibles por el sistema de
información de forma inequívoca. Cada fila de una tabla representa inequívocamente un
elemento reconocible en el sistema. Lo que ocurre es que conceptualmente es difícil
agrupar esos elementos correctamente.
En cualquier caso la mayor parte de problemas se agravan si no se sigue un modelo
conceptual y se decide crear directamente el esquema relacional. En ese caso, el diseño
tiene una garantía casi asegurada de funcionar mal.
Cuando aparecen los problemas enumerados, entonces se les puede resolver usando
reglas de normalización. Estas reglas suelen forzar la división de una tabla en dos o más
tablas para arreglar ese problema.
(7474
(74)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
TRABAJADOR
DNI Nombre Departamento
12121212A Andrés Mantenimiento
12345345G Andrea Dirección
Gestión
Visualmente es un tabla, pero no una tabla relacional (lo que en terminología de bases
de datos relacionales se llama relación). No cumple la primera forma normal.
Sería primera forma normal si los datos fueran:
TRABAJADOR
DNI Nombre Departamento
12121212A Andrés Mantenimiento
12345345G Andrea Dirección
12345345G Andrea Gestión
Esa tabla sí esta en primera forma normal.
(7575
(75)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
sobre apellidos. El dni sí produce una dependencia funcional completa sobre el campo
apellidos.
Una dependencia funcional completa se denota como XY
dependencia funcional elemental
Se produce cuando X e Y forman una dependencia funcional completa y además Y es un
único atributo.
dependencia funcional transitiva
Es más compleja de explicar, pero tiene también utilidad. Se produce cuando tenemos
tres conjuntos de atributos X, Y y Z. Y depende funcionalmente de X (XY), Z depende
funcionalmente de Y (YZ). Además X no depende funcionalmente de Y (Y-/X).
Entonces ocurre que X produce una dependencia funcional transitiva sobre Z.
Esto se denota como: (X Z)
Por ejemplo si X es el atributo Número de Clase de un instituto, e Y es el atributo
Código Tutor. Entonces XY (el tutor depende funcionalmente del número de clase).
Si Z representa el Código del departamento, entonces YZ (el código del
departamento depende funcionalmente del código tutor, cada tutor sólo puede estar en
un departamento). Como ocurre que Y-/X (el código de la clase no depende
funcionalmente del código tutor, un código tutor se puede corresponder con varios códigos
de clase). Entonces X Z (el código del departamento depende transitivamente del
código de la clase).
(7676
(76)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
ASISTENCIA
DNI Cod Curso Nota
12121219A 34 9
12121219A 25 8
3457775G 34 6
5674378J 25 7
5674378J 34 6
ALUMNOS
DNI Nombre Apellido1 Cod Provincia Provincia
12121349A Salvador Velasco 34 Palencia
12121219A Pedro Valiente 34 Palencia
3457775G Ana Fernández 47 Valladolid
5674378J Sara Crespo 47 Valladolid
3456858S Marina Serrat 08 Barcelona
La Provincia depende funcionalmente del código de provincia, lo que hace que no esté
en 3FN. El arreglo sería:
ALUMNOS
DNI Nombre Apellido1 Cod Provincia
12121349A Salvador Velasco 34
12121219A Pedro Valiente 34
3457775G Ana Fernández 47
5674378J Sara Crespo 47
3456858S Marina Serrat 08
PROVINCIA
Cod Provincia Provincia
34 Palencia
47 Valladolid
08 Barcelona
(7777
(77)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
ORGANIZACIÓN
Trabajador Departamento Responsable
Alex Producción Felipa
Arturo Producción Martín
Carlos Ventas Julio
Carlos Producción Felipa
Gabriela Producción Higinio
Luisa Ventas Eva
Luisa Producción Martín
Manuela Ventas Julio
Pedro Ventas Eva
PERSONAL
Trabajador Responsable
Alex Felipa
Arturo Martín
Carlos Julio
Carlos Felipa
Gabriela Higinio
Luisa Eva
Luisa Martín
Manuela Julio
Pedro Eva
(7878
(78)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
RESPONSABLES
Responsables Departamento
Felipa Producción
Martín Producción
Julio Ventas
Higinio Producción
Eva Ventas
En las formas de Boyce-Codd hay que tener cuidado al descomponer ya que se podría
perder información por una mala descomposición
La tabla cursos, profesores y materiales del curso. La tabla está en FNBC ya que no hay
dependencias transitivas y todos los atributos son clave sin dependencia funcional hacia
ellos. Sin embargo hay redundancia. Los materiales se van a repetir para cualquier
profesor dando cualquier curso, ya que los profesores van a utilizar todos los materiales
del curso (de no ser así no habría ninguna redundancia).
Los materiales del curso dependen de forma multivaluada del curso y no del profesor
en una dependencia multivaluada (no hay dependencia funcional ya que los posibles
valores son varios). Para el par Nº de curso y Profesor podemos saber los materiales; pero
lo sabemos por el curso y no por el profesor.
(7979
(79)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Nº Curso Material
17 1
17 2
25 1
25 2
25 3
Nº Curso Profesor
17 Eva
17 Julia
25 Eva
(8080
(80)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Proveedor Material
1 1
1 2
2 1
Material Proyecto
1 2
2 1
1 1
Proveedor Proyecto
1 2
1 1
2 1
Esa descomposición no pierde valores en este caso, sabiendo que si el proveedor nos
suministra un material podremos relacionarle con todos los proyectos que utilizan ese
material.
(8181)
(81)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
Resumiendo, una tabla no está en quinta forma normal si hay una descomposición de
esa tabla que muestre la misma información que la original y esa descomposición no tenga
como clave la clave original de la tabla.
Fagin dice que una tabla está en FNDC si toda restricción sobre la tabla es consecuencia
lógica de aplicar las restricciones de dominio y clave sobre la misma. Fagin demostró
que si esto ocurría la tabla incluso estaba en 5FN.
Ejemplo:
(8282
(82)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 2) modelo relacional autor: Jorge Sánchez – www.jorgesanchez.net
No se pierde información al diseñar las tablas de esta forma y de hecho es más eficiente
para la base de datos.
(8383
(83)
)
(3)
SQL (I).
DDL y DML
(3.1) notas previas
(3.1.1) versión de SQL
Aunque estos apuntes sirven como guía de uso de SQL estándar, la base de datos que se
utiliza como referencia fundamental es la base de datos Oracle. Normalmente se
indican siempre las instrucciones para Oracle y para el SQL estándar. En las partes
donde no se indique explícitamente diferencia, significará que Oracle coincide con el
estándar.
Sin embargo hay que avisar que todos los ejemplos han sido probados para Oracle,
mientras que no se puede decir lo mismo para SQL estándar. En el caso de SQL
estándar, el software PostgreSQL se ha tenido muy en cuenta ya que parece el más
respetuoso actualmente con el estándar.
No obstante debo disculparme porque es posible que muchos apartados se refieran sólo
a Oracle y sobre todo los detalles de funcionamiento y resultados no han tenido en cuenta
el estándar, sino sólo el funcionamiento de Oracle.
La razón de utilizar Oracle como base de trabajo se debe a su respeto por SQL estándar
(aunque desde luego no tan estricto como PostgreSQL), es decir que no es excesivamente
diferente; pero fundamentalmente por ser el SGBD de referencia más importante desde
hace ya muchos años. De hecho lo que Oracle aporta de novedoso en cada versión, acaba
formando parte del estándar futuro.
(81)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
Los ejemplos sirven para escenificar una instrucción concreta, la sintaxis se utiliza para
indicar las forma de utilizar un comando.
Para indicar la sintaxis de un comando se usan símbolos especiales. Los símbolos que
utiliza este libro (de acuerdo con la sintaxis que se utiliza normalmente en cualquier
documentación de este tipo) son:
PALABRA Cuando en la sintaxis se utiliza una palabra en negrita, significa que
es una palabra que hay que escribir literalmente (aunque sin importar si en
mayúsculas o minúsculas).
texto. El texto que aparece en color normal sirve para indicar que no hay que
escribirle literalmente, sino que se refiere a un tipo de elemento que se puede
utilizar en el comando. Ejemplo:
El texto columna hay que cambiarlo por un nombre concreto de columna (nombre,
apellidos,...), al igual que tabla se refiere a un nombre de tabla concreto.
texto en negrita. Sirve para indicar texto o símbolos que hay que escribir de
forma literal, pero que no son palabras reservadas del lenguaje.
[ ] (corchetes). Los corchetes sirven para encerrar texto que no es obligatorio
en el comando, es decir para indicar una parte opcional.
| (barra vertical). Este símbolo (|), la barra vertical, indica opción. Las
palabras separadas con este signo indican que se debe elegir una de entre todas
las palabras.
... (puntos suspensivos) Indica que se puede repetir el texto anterior en el
comando continuamente (significaría, y así sucesivamente)
{} (llaves) Las llaves sirven para indicar opciones mutuamente exclusivas pero
obligatorias. Es decir, opciones de las que sólo se puede elegir una opción, pero
de las que es obligado elegir una. Ejemplo:
SELECT { * | columna | expresión }
FROM tabla;
(82)
(8282
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
(3.2) introducción
(3.2.1) objetivos
(83)
(8383
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
(3.2.3) funcionamiento
componentes de un entorno de ejecución SQL
Según la normativa ANSI/ISO cuando se ejecuta SQL, existen los siguientes elementos a
tener en cuenta en todo el entorno involucrado en la ejecución de instrucciones SQL:
Un agente SQL. Entendido como cualquier elemento que cause la ejecución de
instrucciones SQL que serán recibidas por un cliente SQL
Una implementación SQL. Se trata de un procesador software capaz de
ejecutar las instrucciones pedidas por el agente SQL. Una implementación está
compuesta por:
Un cliente SQL. Software conectado al agente que funciona como interfaz
entre el agente SQL y el servidor SQL. Sirve para establecer conexiones entre
sí mismo y el servidor SQL.
Un servidor SQL (puede haber varios). El software encargado de manejar
los datos a los que la instrucción SQL lanzada por el agente hace
referencia. Es el software que realmente realiza la instrucción, los datos
los devuelve al cliente.
posibles agentes SQL. posibles modos de ejecución SQL
ejecución directa. SQL interactivo
Las instrucciones SQL se introducen a través de un cliente que está directamente
conectado al servidor SQL; por lo que las instrucciones se traducen sin intermediarios y
los resultados se muestran en el cliente.
Normalmente es un modo de trabajo incómodo, pero permite tener acceso a todas
las capacidades del lenguaje SQL de la base de datos a la que estamos conectados.
ejecución incrustada o embebida
Las instrucciones SQL se colocan como parte del código de otro lenguaje que se
considera anfitrión (C, Java, Pascal, Visual Basic,...). Al compilar el código se utiliza un
precompilador de la propia base de datos para traducir el SQL y conectar la aplicación
resultado con la base de datos a través de un software adaptador (driver) como JDBC u
ODBC por ejemplo.
ejecución a través de clientes gráficos
Se trata de software que permite conectar a la base de datos a través de un cliente. El
software permite manejar de forma gráfica la base de datos y las acciones realizadas
son traducidas a SQL y enviadas al servidor. Los resultados recibidos vuelven a ser
traducidos de forma gráfica para un manejo más cómodo
ejecución dinámica
Se trata de SQL incrustado en módulos especiales que pueden ser invocados una y otra vez
desde distintas aplicaciones.
(84)
(8484
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
(85)
(8585
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
El DDL es la parte del lenguaje SQL que realiza la función de definición de datos del SGBD.
Fundamentalmente se encarga de la creación, modificación y eliminación de los objetos
de la base de datos (es decir de los metadatos). Por supuesto es el encargado de la
creación de las tablas.
Cada usuario de una base de datos posee un esquema. El esquema suele tener el mismo
nombre que el usuario y sirve para almacenar los objetos de esquema, es decir los
objetos que posee el usuario.
Esos objetos pueden ser: tablas, vistas, índices y otras objetos relacionados con la
definición de la base de datos. Los objetos son manipulados y creados por los usuarios.
En principio sólo los administradores y los usuarios propietarios pueden acceder a cada
objeto, salvo que se modifiquen los privilegios del objeto para permitir el acceso a otros
usuarios.
Hay que tener en cuenta que ninguna instrucción DDL puede ser anulada por una
instrucción ROLLBACK (la instrucción ROLLBACK está relacionada con el uso de
transacciones que se comentarán más adelante) por lo que hay que tener mucha
precaución a la hora de utilizarlas. Es decir, las instrucciones DDL generan acciones que
no se pueden deshacer (salvo que dispongamos de alguna copia de seguridad).
(86)
(8686
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
catálogo.esquema.objeto
(87)
(8787
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
Se puede indicar un valor por defecto para el atributo mediante la cláusula DEFAULT:
(88)
(8888
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
(89)
(8989
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Durante el resto del manual se hará referencia sólo a los tipos Oracle.
textos
Para los textos disponemos de los siguientes tipos (Oracle):
VARCHAR . Para textos de longitud variable. Su tamaño depende de la base de
datos (en Oracle es de 4000). En Oracle se llama VARCHAR2, pero es posible
seguir utilizando VARCHAR.
CHAR. Para textos de longitud fija (en Oracle hasta 2000 caracteres).
NCHAR. Para el almacenamiento de caracteres nacionales de texto fijo
NVARCHAR. Para el almacenamiento de caracteres nacionales de longitud
variable. En Oracle se llama NVARCHAR2.
En todos estos tipos se indican los tamaños entre paréntesis tras el nombre del tipo.
Conviene poner suficiente espacio para almacenar los valores. En el caso de los VARCHAR2,
no se malgasta espacio por poner más espacio del deseado ya que si el texto es más
pequeño que el tamaño indicado, el resto del espacio se ocupa.
números
En este capítulo se explican los tipos numéricos para el sistema Oracle; para SQL
estándar consultar la tabla de tipos de datos.
En Oracle, el tipo NUMBER es un formato versátil que permite representar todo tipo
de números. Su rango recoge números de entre 10-130 y 9,99999999999 * 10128. Fuera de
estos rangos Oracle devuelve un error.
Los números decimales (números de coma fija) se indican con NUMBER(p,s), donde p
es la precisión máxima y s es la escala (número de decimales a la derecha de la coma).
Por ejemplo, NUMBER (8,3) indica que se representan números de ocho cifras de
precisión y tres decimales. Los decimales en Oracle se presenta con el punto y no con
la coma.
Para números enteros se indica NUMBER(p) donde p es el número de dígitos. Eso es
equivalente a NUMBER(p,0).
Para números de coma flotante (equivalentes a los float o double de muchos lenguajes
de programación) simplemente se indica el texto NUMBER sin precisión ni escala.
precisión y escala
La cuestión de la precisión y la escala es compleja. Para entenderla mejor, se muestran
estos ejemplos:
(90)
(909
0)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
En definitiva, la precisión debe incluir todos los dígitos del número (puede llegar hasta
38 dígitos). La escala sólo indica los decimales que se respetarán del número, pero si es
negativa indica ceros a la izquierda del decimal.
fechas y horas
DATE
El tipo DATE permite almacenar fechas. Las fechas se pueden escribir en formato día, mes
y año entre comillas. El separador puede ser una barra de dividir, un guión y casi cualquier
símbolo.
Para almacenar la fecha actual la mayoría de bases de datos proporcionan funciones
(como SYSDATE en Oracle) que devuelven ese valor. Las fechas no se pueden manejar
directamente, normalmente se usan funciones de conversión. En el caso de Oracle se suele
usar TO_DATE (que se detallará en el tema siguiente). Ejemplo:
TO_DATE(‘3/5/2007’)
TIMESTAMP
Es una extensión del anterior, almacena valores de día, mes y año, junto con hora, minuto
y segundos (incluso con decimales). Con lo que representa un instante concreto en el
tiempo. Un ejemplo de TIMESTAMP sería ‘2/2/2004 18:34:23,34521’. En este caso si el
formato de fecha y hora del sistema está pensado para el idioma español, el separador
decimal será la coma (y no el punto).
intervalos
Sirven para almacenar intervalos de tiempo (no fechas, sino una suma de elementos de
tiempo). En el caso de Oracle son:
INTERVAL YEAR TO MONTH
Este tipo de datos almacena años y meses. Tras la palabra YEAR se puede indicar la
precisión de los años (cifras del año), por defecto es de dos..
Para los intervalos de año a mes los valores se pueden indicar de estas formas:
(91)
(9191
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplos:
(3.4.6) dominios
En Oracle se echa de menos una instrucción que forma parte del estándar SQL y que
permite crear dominios. Sin embargo en SQL estándar sí hay esa posibilidad y de hecho
es muy interesante. Se trata de CREATE DOMAIN:
(92)
(9292
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
Esa instrucción muestra una tabla con diversas columnas, entre ellas la columna
TABLE_CATALOG indica el catálogo en el que está la tabla, TABLE_SCHEMA el
esquema en el que está la tabla y TABLE_NAME el nombre de la tabla.
Muchos SGBD respetan el estándar, pero en el caso de Oracle no. Oracle utiliza diversas
vistas para mostrar las tablas de la base de datos. En concreto USER_TABLES y que
contiene una lista de las tablas del usuario actual (o del esquema actual). Así para sacar
la lista de tablas del usuario actual, se haría:
(93)
(9393
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
DESCRIBE existencias;
Y aparecerán los campos de la tabla proveedores. Esta instrucción no es parte del SQL
estándar, pero casi es considerada así ya que casi todos los SGBD la utilizan. Un ejemplo
del resultado de la orden anterior (en Oracle) sería:
(94)
(949
4)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Pero por coherencia es mejor hacerlo de la primera forma (la del estándar).
borrar contenido de tablas
Oracle dispone de una orden no estándar para eliminar definitivamente los datos de una
tabla; es la orden TRUNCATE TABLE seguida del nombre de la tabla a borrar. Hace que se
elimine el contenido de la tabla, pero no la estructura de la tabla en sí. Incluso borra del
archivo de datos el espacio ocupado por la tabla.
añadir columnas
Permite añadir nuevas columnas a la tabla. Se deben indicar su tipo de datos y sus
propiedades si es necesario (al estilo de CREATE TABLE).
Las nuevas columnas se añaden al final, no se puede indicar otra posición (hay que
recordar que el orden de las columnas no importa). Ejemplo:
Muchas bases de datos (pero no Oracle) requieren escribir la palabra COLUMN tras la
palabra ADD. Normalmente suele ser opcional
borrar columnas
Elimina la columna indicada de manera irreversible e incluyendo los datos que contenía.
No se puede eliminar la única columna de una tabla que sólo tiene esa columna (habrá
que usar DROP TABLE).
Al igual que en el caso anterior, en SQL estándar se puede escribir el texto COLUMN
tras la palabra DROP.
(95)
(9595
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
modificar columna
Permite cambiar el tipo de datos y propiedades de una determinada columna. Sintaxis:
Ejemplo:
Ejemplo:
(96)
(969
6)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
(3.4.10) restricciones
Una restricción es una condición de obligado cumplimiento para una o más columnas de
la tabla. A cada restricción se le pone un nombre, en el caso de no poner un nombre (algo
poco recomendable) entonces el propio Oracle le coloca el nombre que es un
mnemotécnico con el nombre de tabla, columna y tipo de restricción.
Su sintaxis general es:
Las restricciones tienen un nombre, se puede hacer que sea la base de datos la que les
ponga nombre, pero entonces sería críptico. Por eso es mejor ponerle un nombre
nosotros para que sea más fácil de recordar.
Los nombres de restricción no se pueden repetir para el mismo esquema, debemos
de buscar nombres únicos. Es buena idea incluir de algún modo el nombre de la tabla,
los campos involucrados y el tipo de restricción en el nombre de la misma. Por ejemplo
pieza_id_pk podría indicar que el campo id de la tabla pieza tiene una clave principal
(PRIMARY KEY).
Desde la empresa Oracle se aconseja la siguiente regla a la hora de poner nombre a las
restricciones:
Tres letras para el nombre de la tabla
Carácter de subrayado
Tres letras con la columna afectada por la restricción
Carácter de subrayado
Dos letras con la abreviatura del tipo de restricción. La abreviatura puede ser:
NN. NOT NULL.
PK. PRIMARY KEY
UK. UNIQUE
FK. FOREIGN KEY
CK. CHECK (validación)
Por ejemplo para hacer que la clave principal de la tabla Alumnos sea el código del
alumno, el nombre de la restricción podría ser:
alu_cod_pk
(97)
(9797
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
prohibir nulos
La restricción NOT NULL permite prohibir los nulos en una determinada tabla. Eso
obliga a que la columna tenga que tener obligatoriamente un valor para que sea
almacenado el registro.
Se puede colocar durante la creación (o modificación) del campo añadiendo la
palabra NOT NULL tras el tipo:
En ese caso el nombre le coloca la propia base de datos (en el caso de Oracle el nombre
sería algo como SY002341 por ejemplo). No es recomendable no poner nombre a las
restricciones para controlarlas mejor.
Para poner el nombre se usa:
La restricción NOT NULL es la única que sólo se puede poner seguida al nombre de la
columna a la que se aplica (la razón es que NOT NULL sólo se puede aplicar a un campo
a la vez)
valores únicos
Las restricciones de tipo UNIQUE obligan a que el contenido de una o más columnas no
puedan repetir valores. Nuevamente hay dos formas de colocar esta restricción:
La coma tras la definición del campo cod_pelicula hace que la restricción sea
independiente de ese campo. Eso obliga a que, tras UNIQUE se indique la lista de
campos. Incluso para un solo campo se puede colocar la restricción al final de la lista en
lugar de definirlo a continuación del nombre y tipo de la columna.
(98)
(9898
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Significa esta instrucción (en cuanto a claves foráneas) que el campo dni se relaciona
con la columna dni de la tabla clientes.
Si el campo al que se hace referencia es la clave principal, se puede obviar el nombre
del campo:
En este caso se entiende que los campos hacen referencia a las claves principales de las
tablas referenciadas (si la relación la forma más un campo, el orden de los campos debe
de ser el mismo).
Esto forma una relación entre dichas tablas, que además obliga al cumplimiento de
la integridad referencial. Esta integridad obliga a que cualquier dni incluido en la
(99)
(999
9)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
tabla alquiler tenga que estar obligatoriamente en la tabla de clientes. De no ser así el
registro no será insertado en la tabla (ocurrirá un error).
Otra forma de crear claves foráneas (útil para claves formadas por más de un
campo) es:
Si la definición de clave secundaria se pone al final hace falta colocar el texto FOREIGN
KEY para indicar en qué campos se coloca la restricción de clave foránea. En el ejemplo
anterior es absolutamente necesario que la clave principal de la tabla piezas a la que hace
referencia la clave la formen las columnas tipo y modelo y en que estén en ese orden.
La integridad referencial es una herramienta imprescindible de las bases de datos
relacionales. Pero provoca varios problemas. Por ejemplo, si borramos un registro en la
tabla principal que está relacionado con uno o varios de la secundaria ocurrirá un error,
ya que de permitírsenos borrar el registro ocurrirá fallo de integridad (habrá claves
secundarios refiriéndose a una clave principal que ya no existe).
Por ello se nos pueden ofrecer soluciones a añadir tras la cláusula REFERENCES. Son:
ON DELETE SET NULL. Coloca nulos todas las claves secundarias relacionadas
con la borrada.
ON DELETE CASCADE. Borra todos los registros cuya clave secundaria es igual
que la clave del registro borrado.
ON DELETE SET DEFAULT. Coloca en el registro relacionado el valor por
defecto en la columna relacionada
ON DELETE NOTHING. No hace nada.
En la base de datos Oracle sólo se permite utilizar ON DELETE SET NULL u ON DELETE
CASCADE. No se admite el uso de ON UPDATE en ningún caso.
(100
(1001
) 00)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
(101
(1011
) 01)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
CREATE TABLE ingresos(cod NUMBER(5) PRIMARY KEY,
concepto VARCHAR2(40) NOT NULL,
importe NUMBER(11,2) CONSTRAINT importe_min
CHECK (importe>0)
CONSTRAINT importe_max
CHECK (importe<8000) );
En este caso la CHECK prohíbe añadir datos cuyo importe no esté entre 0 y 8000
Para poder hacer referencia a otras columnas hay que construir la restricción de
forma independiente a la columna (es decir al final de la tabla):
La opción PRIMARY KEY elimina una clave principal (también quitará el índice UNIQUE
sobre las campos que formaban la clave. UNIQUE elimina índices únicos. La opción
CONSTRAINT elimina la restricción indicada.
La opción CASCADE hace que se eliminen en cascada las restricciones de integridad
que dependen de la restricción eliminada.
(102
(1021
) 02)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
ERROR en línea 1:
ORA-12991: se hace referencia a la columna en una restricción de multicolumna
El error se debe a que no es posible borrar una columna que forma parte de la
definición de una instrucción. La solución es utilizar CASCADE CONSTRAINT elimina las
restricciones en las que la columna a borrar estaba implicada:
desactivar restricciones
A veces conviene temporalmente desactivar una restricción para saltarse las reglas que
impone. La sintaxis es (en Oracle):
(103
(1031
) 03)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
mostrar restricciones
SQL estándar
En SQL estándar hay dos vistas del diccionario de datos que permiten visualizar la
información sobre las restricciones aplicadas en la base de datos. Son:
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE.
La primera permite analizar las restricciones colocada. Devuelve una tabla con la
siguiente estructura:
(104
(1041
) 04)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
(105
(1051
) 05)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Es una de las partes fundamentales del lenguaje SQL. El DML (Data Manipulation
Language) lo forman las instrucciones capaces de modificar los datos de las tablas. Al
conjunto de instrucciones DML que se ejecutan consecutivamente, se las llama
transacciones y se pueden anular todas ellas o aceptar, ya que una instrucción DML no
es realmente efectuada hasta que no se acepta (COMMIT).
En todas estas consultas, el único dato devuelto por Oracle es el número de registros
que se han modificado.
(106
(1061
) 06)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
La tabla representa la tabla a la que queremos añadir el registro y los valores que
siguen a VALUES son los valores que damos a los distintos campos del registro. Si no se
especifica la lista de campos, la lista de valores debe seguir el orden de las columnas
según fueron creados (es el orden de columnas según las devuelve el comando DESCRIBE).
La lista de campos a rellenar se indica si no queremos rellenar todos los campos. Los
campos no rellenados explícitamente con la orden INSERT, se rellenan con su valor por
defecto (DEFAULT) o bien con NULL si no se indicó valor alguno. Si algún campo tiene
restricción de obligatoriedad (NOT NULL), ocurrirá un error si no rellenamos el campo con
algún valor.
Por ejemplo, supongamos que tenemos una tabla de clientes cuyos campos son: dni,
nombre, apellido1, apellido2, localidad y dirección; supongamos que ese es el orden
de creación de los campos de esa tabla y que la localidad tiene como valor por defecto
Palencia y la dirección no tiene valor por defecto. En ese caso estas dos instrucciones son
equivalentes:
Son equivalentes puesto que en la segunda instrucción los campos no indicados se rellenan
con su valor por defecto y la dirección no tiene valor por defecto. La palabra DEFAULT
fuerza a utilizar ese valor por defecto.
El uso de los distintos tipos de datos debe de cumplir los requisitos ya comentados
en apartados anteriores.
UPDATE tabla
SET columna1=valor1 [,columna2=valor2...]
[WHERE condición]
Se modifican las columnas indicadas en el apartado SET con los valores indicados. La
cláusula WHERE permite especificar qué registros serán modificados.
Ejemplos:
El primer dato actualiza la provincia de los clientes de Orense para que aparezca como
Ourense.
(107
(1071
) 07)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
El segundo UPDATE incrementa los precios en un 16%. La expresión para el valor puede
ser todo lo compleja que se desee (en el ejemplo se utilizan funciones de fecha para
conseguir que los partidos que se juagaban hoy, pasen a jugarse el martes):
Operador Significado
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
= Igual
<> Distinto
!= Distinto
Operador Significado
AND Devuelve verdadero si las expresiones
a su izquierda y derecha son ambas
verdaderas
OR Devuelve verdadero si cualquiera de
las dos expresiones a izquierda y
derecha del OR, son verdaderas
NOT Invierte la lógica de la expresión que
está a su derecha. Si era verdadera,
mediante NOT pasa a ser falso.
Es más sencilla que las anteriores, elimina los registros de la tabla que cumplan la
condición indicada. Ejemplo:
(108
(1081
) 08)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Hay que tener en cuenta que el borrado de un registro no puede provocar fallos de
integridad y que la opción de integridad ON DELETE CASCADE hace que no sólo se borren
los registros indicados en el SELECT, sino todos los relacionados.
(3.6) transacciones
Como se ha comentado anteriormente, una transacción está formada por una serie de
instrucciones DML. Una transacción comienza con la primera instrucción DML que se
ejecute y finaliza con alguna de estas circunstancias:
Una operación COMMIT o ROLLBACK
Una instrucción DDL (como ALTER TABLE por ejemplo)
Una instrucción DCL (como GRANT)
El usuario abandona la sesión
Caída del sistema
Hay que tener en cuenta que cualquier instrucción DDL o DCL da lugar a un COMMIT
implícito, es decir todas las instrucciones DML ejecutadas hasta ese instante pasan a ser
definitivas.
(3.6.2) COMMIT
La instrucción COMMIT hace que los cambios realizados por la transacción sean definitivos,
irrevocables. Sólo se debe utilizar si estamos de acuerdo con los cambios, conviene
asegurarse mucho antes de realizar el COMMIT ya que las instrucciones ejecutadas pueden
afectar a miles de registros.
Además el cierre correcto de la sesión da lugar a un COMMIT, aunque siempre conviene
ejecutar explícitamente esta instrucción a fin de asegurarnos de lo que hacemos.
(3.6.3) ROLLBACK
Esta instrucción regresa a la instrucción anterior al inicio de la transacción,
normalmente el último COMMIT, la última instrucción DDL o DCL o al inicio de sesión.
Anula definitivamente los cambios, por lo que conviene también asegurarse de esta
operación.
Un abandono de sesión incorrecto o un problema de comunicación o de caída del
sistema dan lugar a un ROLLBACK implícito.
(109
(1091
) 09)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
El ejemplo crea un índice para los campos apellido1, apellido2 y nombre. Esto no es lo
mismo que crear un índice para cada campo, este índice es efectivo cuando se buscan u
ordenan clientes usando los tres campos (apellido1, apellido2, nombre) a la vez.
Se aconseja crear índices en campos que:
Contengan una gran cantidad de valores
Contengan una gran cantidad de nulos
Sean parte habitual de cláusulas WHERE, GROUP BY u ORDER BY
Seann parte de listados de consultas de grandes tablas sobre las que casi
siempre se muestran como mucho un 4% de su contenido.
(110
(11011
) 0)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Esos índices tienen sentido si en las consultas se utilizan exactamente esas expresiones.
lista de índices
Para ver la lista de índices en Oracle se utiliza la vista USER_INDEXES. Mientras que la
vista USER_IND_COLUMNS Muestra la lista de columnas que son utilizadas por índices.
borrar índices
La instrucción DROP INDEX seguida del nombre del índice permite eliminar el índice en
cuestión.
(3.7.2) secuencias
Una secuencia sirve para generar automáticamente números distintos. Se utilizan para
generar valores para campos que se utilizan como clave forzada (claves cuyo valor no
interesa, sólo sirven para identificar los registros de una tabla). Es decir se utilizan en
los identificadores de las tablas (campos que comienzan con la palabra id), siempre y
cuando no importe qué número se asigna a cada fila.
Es una rutina interna de la base de datos la que realiza la función de generar un número
distinto cada vez. Las secuencias se almacenan independientemente de la tabla, por
lo que la misma secuencia se puede utilizar para diversas tablas.
creación de secuencias
Sintaxis:
(111)
(111111
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
Donde:
secuencia. Es el nombre que se le da al objeto de secuencia
INCREMENT BY. Indica cuánto se incrementa la secuencia cada vez que se usa.
Por defecto se incrementa de uno en uno
START WITH. Indica el valor inicial de la secuencia (por defecto 1)
MAXVALUE. Máximo valor que puede tomar la secuencia. Si no se toma
NOMAXVALUE que permite llegar hasta el 1027
MINVALUE. Mínimo valor que puede tomar la secuencia. Por defecto -1026
CYCLE. Hace que la secuencia vuelva a empezar si se ha llegado al máximo
valor.
Ejemplo:
En SQL estándar:
SELECT nextval(‘numeroPlanta’);
No se puede utilizar (y siempre hay tentaciones para ello) como valor para la cláusula
DEFAULT de un campo de tabla.
Su uso más habitual es como apoyo al comando INSERT (en Oracle):
(112
(11211
) 2)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 3) SQL (I). DDL y DML autor: Jorge Sánchez – www.jorgesanchez.net
borrar secuencias
Lo hace el comando DROP SEQUENCE seguido del nombre de la secuencia a borrar.
lista de secuencias
En SQL estándar, a través de INFORMATION_SCHEMA.SEQUENCES podemos acceder a la
información sobre todas las secuencias creadas. En Oracle se hace mediante la vista
USER_SEQUENCES permite observar la lista de secuencias del usuario.
(3.7.3) sinónimos
En Oracle, un sinónimo es un nombre que se asigna a un objeto cualquiera.
Normalmente es un nombre menos descriptivo que el original a fin de facilitar la escritura
del nombre del objeto en diversas expresiones.
creación
Sintaxis:
objeto es el objeto al que se referirá el sinónimo. La cláusula PUBLIC hace que el sinónimo
esté disponible para cualquier usuario (sólo se permite utilizar si disponemos de
privilegios administrativos).
borrado
lista de sinónimos
La vista USER_SYNONYMS permite observar la lista de sinónimos del usuario, la vista
ALL_SYNONYMS permite mostrar la lista completa de sinónimos de todos los esquemas
a los que tenemos acceso.
(113)
(11311
3)
(4)
SQL (II).
Consultas
(4.1) consultas de datos con SQL. DQL
(4.1.1) capacidades
DQL es la abreviatura del Data Query Language (lenguaje de consulta de datos) de
SQL. El único comando que pertenece a este lenguaje es el versátil comando SELECT
Este comando permite:
Obtener datos de ciertas columnas de una tabla (proyección)
Obtener registros (filas) de una tabla de acuerdo con ciertos criterios
(selección)
Mezclar datos de tablas diferentes (asociación, join)
Realizar cálculos sobre los datos
Agrupar datos
(115)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplos:
(4.2) cálculos
(4.2.1) aritméticos
Los operadores + (suma), - (resta), * (multiplicación) y / (división), se pueden utilizar para
hacer cálculos en las consultas. Cuando se utilizan como expresión en una consulta
SELECT, no modifican los datos originales sino que como resultado de la vista generada
por SELECT, aparece un nueva columna. Ejemplo:
Esa consulta obtiene tres columnas. La tercera tendrá como nombre la expresión
utilizada, para poner un alias basta utilizar dicho alias tras la expresión:
(11611
(116)
6116)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
El resultado sería:
AR 6 AR-6
AR 7 AR-7
AR 8 AR-8
AR 9 AR-9
AR 12 AR-12
AR 15 AR-15
AR 20 AR-20
AR 21 AR-21
BI 10 BI-10
BI 20 BI-20
BI 22 BI-22
BI 24 BI-24
En la mayoría de bases de datos, la función CONCAT (se describe más adelante) realiza
la misma función.
(4.3) condiciones
Se pueden realizar consultas que restrinjan los datos de salida de las tablas. Para ello se
utiliza la cláusula WHERE. Esta cláusula permite colocar una condición que han de cumplir
todos los registros, los que no la cumplan no aparecen en el resultado.
Ejemplo:
Operador Significado
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
= Igual
(11711
(117)
7117)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
<> Distinto
(11811
(118)
8118)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Operador Significado
!= Distinto
Se pueden utilizar tanto para comparar números como para comparar textos y fechas.
En el caso de los textos, las comparaciones se hacen en orden alfabético. Sólo que es un
orden alfabético estricto. Es decir el orden de los caracteres en la tabla de códigos.
En muchas bases de datos hay problemas con la Ñ y otros símbolos nacionales (en
especial al ordenar o comparar con el signo de mayor o menor, ya que la el orden ASCII no
respeta el orden de cada alfabeto nacional). No obstante es un problema que tiende a
arreglarse en la actualidad en todos los SGBD (en Oracle no existe problema alguno)
especialmente si son compatibles con Unicode.
Ejemplos:
(4.3.3) BETWEEN
El operador BETWEEN nos permite obtener datos que se encuentren en un rango. Uso:
(11911
(119)
9119)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
(4.3.4) IN
Permite obtener registros cuyos valores estén en una lista de valores:
Obtiene piezas cuyos precios sean 3, 5 u 8 (no valen ni el precio 4 ni el 6, por ejemplo).
(4.3.5) LIKE
Se usa sobre todo con textos, permite obtener registros cuyo valor en un campo cumpla
una condición textual. LIKE utiliza una cadena que puede contener estos símbolos:
Símbolo Significado
% Una serie cualquiera de caracteres
_ Un carácter cualquiera
Ejemplos:
(4.3.6) IS NULL
Devuelve verdadero si el valor que examina es nulo:
Esa instrucción selecciona a la gente que no tiene teléfono. Se puede usar la expresión
IS NOT NULL que devuelve verdadero en el caso contrario, cuando la expresión no es nula.
(1201
(120)
2012
0)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
(4.4) ordenación
El orden inicial de los registros obtenidos por un SELECT no guarda más que una relación
respecto al orden en el que fueron introducidos. Para ordenar en base a criterios más
interesantes, se utiliza la cláusula ORDER BY.
En esa cláusula se coloca una lista de campos que indica la forma de ordenar. Se ordena
primero por el primer campo de la lista, si hay coincidencias por el segundo, si ahí también
las hay por el tercero, y así sucesivamente.
Se puede colocar las palabras ASC O DESC (por defecto se toma ASC). Esas palabras
significan en ascendente (de la A a la Z, de los números pequeños a los grandes) o en
descendente (de la Z a la a, de los números grandes a los pequeños) respectivamente.
Sintaxis completa de SELECT (para una sola tabla):
(12112
(121)
1121)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
(4.5) funciones
(4.5.1) funciones
nombreFunción[(parámetro1[, parámetro2,...])]
Si una función no precisa parámetros (como SYSDATE) no hace falta colocar los
paréntesis.
En realidad hay dos tipos de funciones:
Funciones que operan con datos de la misma fila
Funciones que operan con datos de varias filas diferentes (funciones de
agrupación).
En este apartado se tratan las funciones del primer tipo (más adelante se comentan las
de agrupación).
En los siguientes apartados se describen algunas de las funciones más interesantes, las
más importantes son las remarcadas con un fondo naranja más intenso.
(1211
(12112
21121
1121)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Función Descripción
ROUND(n,decimales) Redondea el número al siguiente número con el
número de decimales indicado más cercano.
ROUND(8.239,2) devuelve 8.24
TRUNC(n,decimales) Los decimales del número se cortan para que
sólo aparezca el número de decimales indicado
matemáticas
Función Descripción
MOD(n1,n2) Devuelve el resto resultado de dividir n1 entre
n2
POWER(valor,exponente) Eleva el valor al exponente indicado
SQRT(n) Calcula la raíz cuadrada de n
SIGN(n) Devuelve 1 si n es positivo, cero si vale cero y -1
si es negativo
ABS(n) Calcula el valor absoluto de n
EXP(n) Calcula en, es decir el exponente en base e del
número n
LN(n) Logaritmo neperiano de n
LOG(n) Logaritmo en base 10 de n
SIN(n) Calcula el seno de n (n tiene que estar en
radianes)
COS(n) Calcula el coseno de n (n tiene que estar en
radianes)
TAN(n) Calcula la tangente de n (n tiene que estar en
radianes)
ACOS(n) Devuelve en radianes el arco coseno de n
ASIN(n) Devuelve en radianes el arco seno de n
ATAN(n) Devuelve en radianes el arco tangente de n
SINH(n) Devuelve el seno hiperbólico de n
COSH(n) Devuelve el coseno hiperbólico de n
TANH(n) Devuelve la tangente hiperbólica de n
(1221
(1221
22122
22122
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Función Descripción
LOWER(texto) Convierte el texto a minúsculas (funciona con los
caracteres españoles)
UPPER(texto) Convierte el texto a mayúsculas
INITCAP(texto) Coloca la primera letra de cada palabra en
mayúsculas
funciones de transformación
Función Descripción
RTRIM(texto) Elimina los espaciosa la derecha del texto
LTRIM(texto) Elimina los espacios a la izquierda que posea el
texto
TRIM(texto) Elimina los espacios en blanco a la izquierda y la
derecha del texto y los espacios dobles del
interior.
TRIM(caracteres FROM texto) Elimina del texto los caracteres indicados. Por
ejemplo TRIM('h' FROM nombre) elimina las
haches de la columna nombre que estén a la
izquierda y a la derecha
SUBSTR(texto,n[,m]) Obtiene los m siguientes caracteres del texto a
partir de la posición n (si m no se indica se cogen
desde n hasta el final).
LENGTH(texto) Obtiene el tamaño del texto
INSTR(texto, textoBuscado Obtiene la posición en la que se encuentra el texto
[,posInicial [, nAparición]]) buscado en el texto inicial. Se puede empezar a
buscar a partir de una posición inicial concreta e
incluso indicar el número de aparición del
texto buscado.
Ejemplo, si buscamos la letra a y ponemos 2 en
nAparición, devuelve la posición de la segunda
letra a del texto).
Si no lo encuentra devuelve 0
(1231
(1231
23123
23123
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
REPLACE(texto, textoABuscar, Buscar el texto a buscar en un determinado
[textoReemplazo]) texto y lo cambia por el indicado como texto de
reemplazo.
Si no se indica texto de reemplazo, entonces
está función elimina el texto a buscar
(1241
(1241
2412
24124
4) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Función Descripción
TRANSLATE(texto, Potentísima función que permite transformar
caracteres. Los caracteresACambiar son los
caracteresACambiar,
caracteres que se van a cambiar, los
caracteresSustitutivos) caracteresSustitutivos son los caracteres que
reemplazan a los anteriores. De tal modo que el
primer carácter a cambiar se cambia por el
primer carácter sustitutivo, el segundo por el
segundo y así sucesivamente. Ejemplo:
SELECT TRANSLATE(‘prueba’,’ue’,’wx’)
FROM DUAL;
El resultado sería el texto prwxba, de tal forma
que la u se cambia por la w y la e por la x.
Si la segunda cadena es más corta, los caracteres
de la primera que no encuentran sustituto, se
eliminan. Ejemplo:
SELECT TRANSLATE(‘prueba’,’ue’,’w’)
FROM DUAL;
Da como resultado prwba
Función Descripción
ASCII(carácter) Devuelve el código ASCII del carácter indicado
CHR(número) Devuelve el carácter correspondiente al código
ASCII indicado
(1251
(1251
25125
25125
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Función Descripción
SOUNDEX(texto) Devuelve el valor fonético del texto. Es una
función muy interesante para buscar textos de
los que se no se sabe con exactitud su escritura.
Por ejemplo:
SELECT * FROM personas
WHERE SOUNDEX(apellido1)=SOUNDEX(‘Smith’)
Función Descripción
COALESCE(listaExpresiones) Devuelve la primera de las expresiones que no es
nula. Ejemplo2:
El resultado es:
B
A
C
A
(1261
(1261
2612
26126
6) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
2
Ejemplo
(unidad 4) SQL (II). autor: Jorge Sánchez – www.jorgesanchez.net
tomado de http://www.psoug.org/reference/string_func.html
Consultas
(1271
(1271
27127
27127
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Función Descripción
NVL2(valor,sustituto1, Variante de la anterior, devuelve el valor
sustituto2) sustituto1 si valor no es nulo. Si valor es nulo
devuelve el sustituto2
NULLIF(valor1,valor2) Devuelve nulo si valor1 es igual a valor2. De
otro modo devuelve valor1
(1281
(1281
28128
28128
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
(1291
(1291
2912
29129
9) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
caracteres especiales
Nos permiten indicar caracteres que de otra forma no se pueden escribir (como el salto
de línea por ejemplo), ase les llama también secuencias de escape y proceden del lenguaje
C.
carácter significado
\t Tabulador
\n Salto de línea
\r Salto de carro
\v Tabulador vertical
\\ La propia barra
(1301
(1301
3013
30130
0) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
clases significado
\d Dígito, vale cualquier dígito numérico
\D Todo menos dígito
\s Espacio en blanco
\S Cualquier carácter salvo el espacio en blanco
\w Word, carácter válido dentro de los que PHP considera para
identificar variables. Es decir, letras, números o el guion bajo.
\W Todo lo que no sea un carácter de tipo Word.
Nº de serie con una o dos letras mayúsculas, tres números, seguido de una letra un
guión y dos números:
'^[A-Z]{1,2}[0-9]{3}[A-Z]-[0-9]{2}$'
Código postal, números del 01000 al 52999 (se hacen tres grupos: del 10000 al 19999;
del 01000 al 09000; y del 51000 al 52999; de otro modo dejaríamos algún caso de más)
Función Descripción
(13113
(13113
1131)
1131)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Función Descripción
REGEXP_LIKE(texto, Devuelve verdadero si el texto cumple la
expresionRegular [,flag]) expresión regular.
El flag que se puede indicar como tercer
parámetro es una de estas letras (entrecomi-
lladas):
i. No distingue entre mayúsculas y
minúsculas
c. Distingue entre mayúsculas y
minúsculas
n. Hace que el punto represente a todos
los caractere4s excepto al salto de línea
(\n).
x. Ignora los espacios en blanco
(1321
(1321
32132
32132
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Función Descripción
REGEXP_SUBSTR(texto, Busca la expresión regular en el texto y extrae
expresionRegular [,posInicial [, los caracteres que cumplen la expresión. Es, por
nAparición [,flag [,subexpr]]]])) lo tanto, una versión más potente de SUBSTR.
La precisión en el caso de indicar tanto años como meses, se indica sólo en el año. En
intervalos de días a segundos los intervalos se pueden indicar como:
(1331
(1331
33133
33133
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Esos intervalos se pueden sumar a valores de tipo DATE o TIMESTAMP para hacer
cálculos. Gracias a ello se permiten sumar horas o minutos por ejemplo a los datos de
tipo TIMESTAMP.
obtener la fecha y hora actual
Función Descripción
SYSDATE Obtiene la fecha y hora actuales
SYSTIMESTAMP Obtiene la fecha y hora actuales en formato
TIMESTAMP
calcular fechas
Función Descripción
ADD_MONTHS(fecha,n) Añade a la fecha el número de meses indicado
por n
MONTHS_BETWEEN(fecha1, Obtiene la diferencia en meses entre las dos
fecha2) fechas (puede ser decimal)
NEXT_DAY(fecha,día) Indica cual es el día que corresponde a añadir a
la fecha el día indicado. El día puede ser el texto
'Lunes', 'Martes', 'Miércoles',... (si la configura-
ción está en español) o el número de día de la
semana (1=lunes, 2=martes,...)
LAST_DAY(fecha) Obtiene el último día del mes al que pertenece
la fecha. Devuelve un valor DATE
EXTRACT(valor FROM fecha) Extrae un valor de una fecha concreta. El valor
puede ser day (día), month (mes), year (año),
etc.
GREATEST(fecha1, fecha2,..) Devuelve la fecha más moderna la lista
LEAST(fecha1, fecha2,..) Devuelve la fecha más antigua la lista
(1341
(1341
34134
34134
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Función Descripción
ROUND(fecha [,'formato'] Redondea la fecha al valor de aplicar el formato
a la fecha. El formato puede ser:
'YEAR' Hace que la fecha refleje el año
completo
'MONTH' Hace que la fecha refleje el mes
completo más cercano a la fecha
'HH24' Redondea la hora a las 00:00 más
cercanas
'DAY’ Redondea al día más cercano
TRUNC(fecha [formato]) Igual que el anterior pero trunca la fecha en
lugar de redondearla.
También ocurre eso con la conversión de textos a fechas. De hecho es forma habitual de
asignar fechas.
Pero en diversas ocasiones querremos realizar conversiones explícitas.
TO_CHAR
Obtiene un texto a partir de un número o una fecha. En especial se utiliza con fechas
(ya que de número a texto se suele utilizar de forma implícita.
fechas
En el caso de las fechas se indica el formato de conversión, que es una cadena que
puede incluir estos símbolos (en una cadena de texto):
Símbolo Significado
YY Año en formato de dos cifras
YYYY Año en formato de cuatro cifras
MM Mes en formato de dos cifras
MON Las tres primeras letras del mes
MONTH Nombre completo del mes
DY Día de la semana en tres letras
DAY Día completo de la semana
D Día de la semana (del 1 al 7)
(1351
(1351
35135
35135
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Símbolo Significado
DD Día del mes en formato de dos cifras (del 1 al 31)
DDD Día del año
Q Semestre
WW Semana del año
AM Indicador AM
PM Indicador PM
HH12 Hora de 1 a 12
HH24 Hora de 0 a 23
MI Minutos (0 a 59)
SS Segundos (0 a 59)
SSSS Segundos desde medianoche
/ . ,:;’ Posición de los separadores, donde se pongan
estos símbolos aparecerán en el resultado
Ejemplos:
SELECT TO_CHAR(SYSDATE, 'DD/MONTH/YYYY, DAY HH:MI:SS')
FROM DUAL ;
/* Sale : 16/AGOSTO /2004, LUNES 08:35:15, por ejemplo*/
números
Para convertir números a textos se usa está función cuando se desean características
especiales. En ese caso en el formato se pueden utilizar estos símbolos:
Símbolo Significado
9 Posición del número
0 Posición del número (muestra ceros)
$ Formato dólar
L Símbolo local de la moneda
S Hace que aparezca el símbolo del signo
D Posición del símbolo decimal (en español, la
coma)
G Posición del separador de grupo (en español el
punto)
TO_NUMBER
Convierte textos en números. Se indica el formato de la conversión (utilizando los
mismos símbolos que los comentados anteriormente).
(1361
(1361
36136
36136
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
TO_DATE
Convierte textos en fechas. Como segundo parámetro se utilizan los códigos de formato
de fechas comentados anteriormente.
CAST
Función muy versátil que permite convertir el resultado a un tipo concreto. Sintaxis:
CAST(expresión AS tipoDatos)
Ejemplo:
Lo interesante es que puede convertir de un tipo a otro. Por ejemplo imaginemos que
tenemos una columna en una tabla mal planteada en la que el precio de las cosas se ha
escrito en Euros. Los datos son (se muestra sólo la columna precio:
precio
25.2 €
2.8 €
123.65 €
.78 €
.123 €
20 €
La combinación de SUBSTR e INSTR es para obtener sólo los números. Incluso es posible
que haya que utilizar REPLACE para cambiar los puntos por comas (para utilizar el
separador decimal del idioma español).
(1371
(1371
37137
37137
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
SELECT
DECODE(cotizacion,1, salario*0.85,
2,salario * 0.93,
3,salario * 0.96,
salario)
FROM empleados;
Es una función muy poderosa. En su forma más fácil simplemente se indica el elemento:
SELECT XMLElement("prueba") FROM DUAL;
c1
<nombre>Vanesa</nombre>
<nombre>Luis</nombre>
<nombre>Luisa</nombre>
<nombre>Mercedes</nombre>
<nombre>Laura</nombre>
<nombre>Matías</nombre>
(1381
(1381
38138
38138
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
<nombre>Esperanza</nombre>
Para cada persona aparece una fila y en ella el nombre dentro de un elemento llamado
nombre.
Otro ejemplo más complejo (con subelementos):
SELECT XMLElement( "persona",
XMLElement("nombre",nombre),
XMLElement("apellido1",apellido1),
XMLElement("apellido2",apellido2)
) AS datos
FROM alumnos;
Resultado:
datos
<persona><nombre>Vanesa</nombre><apellido1>Megino</apellido1><apellido2>Sánchez</ap
ellido2></persona>
<persona><nombre>Luis</nombre><apellido1>Abadía</apellido1><apellido2>Castrourdiales</
apellido2></persona>
<persona><nombre>Luisa</nombre><apellido1>Calvo</apellido1><apellido2>Calvo</apellido2
></persona>
<persona><nombre>Mercedes</nombre><apellido1>Aragón</apellido1><apellido2>Cantor</ap
ellido2></persona>
<persona><nombre>Laura</nombre><apellido1>Albero</apellido1><apellido2>Siniestra</apel
lido2></persona>
<persona><nombre>Matías</nombre><apellido1>Hierro</apellido1><apellido2>Amo</apellido
2></persona>
<persona><nombre>Esperanza</nombre><apellido1>Castro</apellido1><apellido2>González</
apellido2></persona>
Podemos también usar cláusulas de atributos, eso es posible con XMLAttributes, otra
función que es capaz de usar atributos. Su sintaxis es:
El valor es el contenido del atributo y los alias el nombre del atributo. Sólo puede haber
una cláusula XMLAtributes dentro de una XMLElement. Ejemplo:
SELECT XMLElement(
"persona",
XMLAttributes(sexo AS "sexo",dni AS "id"),
XMLElement("nombre",nombre),
XMLElement("apellido1",apellido1),
XMLElement("apellido2",apellido2)
) AS datos FROM personas;
(1391
(1391
39139
39139
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Resultado:
datos
<persona sexo="m" id="12030430 ">
<nombre>Vanesa</nombre><apellido1>Megino</apellido1><apellido2>Sánchez</apellido2></persona>
<persona sexo="h" id="12049558 ">
<nombre>Luis</nombre><apellido1>Abadía</apellido1><apellido2>Castrourdiales</apellido2></person
a>
<persona sexo="m" id="12080980 ">
<nombre>Luisa</nombre><apellido1>Calvo</apellido1><apellido2>Calvo</apellido2></persona>
<persona sexo="m" id="12162777 ">
<nombre>Mercedes</nombre><apellido1>Aragón</apellido1><apellido2>Cantor</apellido2></persona>
<persona sexo="m" id="12178979 "
><nombre>Laura</nombre><apellido1>Albero</apellido1><apellido2>Siniestra</apellido2></persona>
<persona sexo="h" id="12213987 ">
<nombre>Matías</nombre><apellido1>Hierro</apellido1><apellido2>Amo</apellido2></persona>
<persona sexo="m" id="12239347 ">
<nombre>Esperanza</nombre><apellido1>Castro</apellido1><apellido2>González</apellido2></person
a>
XMLForest
Se trata de una función similar a XMLElement, sólo que de uso más cómodo. Muestra
elementos XML a partir de datos de las tablas. Su sintaxis es:
datos
<NOMBRE>Vanesa</NOMBRE><AP1>Megino</AP1>
<NOMBRE>Luis</NOMBRE><AP1>Abadía</AP1>
<NOMBRE>Luisa</NOMBRE><AP1>Calvo</AP1>
<NOMBRE>Mercedes</NOMBRE><AP1>Aragón</AP1>
<NOMBRE>Laura</NOMBRE><AP1>Albero</AP1>
<NOMBRE>Matías</NOMBRE><AP1>Hierro</AP1>
<NOMBRE>Esperanza</NOMBRE><AP1>Castro</AP1>
(1401
(1401
4014
4014
0) 0)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Se utilizan comillas dobles y alias en XMLForest para asegurar que los elementos XML salen
en minúsculas (que es lo más recomendable para XML). Aunque el resultado saldría
seguido y en una sola fila, se muestra a continuación en una forma más fácil de leer en
XML.
<listado>
<persona>
<nombre>Luisa</nombre>
<apellido1>Calvo</apellido1>
<apellido2>Calvo</apellido2>
</persona>
<persona>
<nombre>Antonio</nombre>
<apellido1>Sánchez</apellido1>
<apellido2>Fernández</apellido2>
</persona>
<persona>
<nombre>Pablo</nombre>
<apellido1>Varilla</apellido1>
<apellido2>Sánchez</apellido2>
</persona>
<persona>
<nombre>Jorge Luis</nombre>
<apellido1>Andérez</apellido1>
<apellido2>Sánchez</apellido2>
</persona>
(1411
(1411
41141
41141
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
<persona>
<nombre>Johann</nombre>
<apellido1>Mazukelle</apellido1>
<apellido2>Nburu</apellido2>
</persona>
</listado>
XMLAgg ha conseguido meter todos los elementos dentro del grupo creado, listado. Un
ejemplo más complejo sería (combinando todas las funciones anteriores y usando varias
tablas, cuya técnica se explica en el apartado (4.6)):
SELECT XMLElement(
"listado",
XMLAgg(XMLElement(
"empresa",
XMLForest(e.nombre as "nombre"),
(
SELECT XMLElement(
"trabajador",
XMLAgg(
XMLForest(
nombre as "nombre",
apellido1 as "apellido1",
apellido2 as "apellido2")
)
) FROM alumnos a
WHERE a.cif=e.cif
)
) ORDER BY e.nombre
)
)
FROM empresas e;
El resultado (mostrado de una forma más legible, porque en realidad se mostraría todo
seguido):
<listado>
<empresa>
<nombre>Class</nombre>
<trabajador>
<nombre>Matías</nombre>
<apellido1>Hierro</apellido1>
<apellido2>Amo</apellido2>
<nombre>Esperanza</nombre>
<apellido1>Castro</apellido1>
(1421
(1421
4214
42142
2) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
<apellido2>González</apellido2>
</trabajador>
</empresa>
<empresa>
<nombre>FRT S. A.</nombre>
<trabajador>
<nombre>Luis</nombre>
<apellido1>Abadía</apellido1>
<apellido2>Castrourdiales</apellido2>
<nombre>Mercedes</nombre>
<apellido1>Aragón</apellido1>
<apellido2>Cantor</apellido2>
</trabajador>
</empresa>
<empresa>
<nombre>Vidrios Carmelo</nombre>
<trabajador>
<nombre>Luisa</nombre>
<apellido1>Calvo</apellido1>
<apellido2>Calvo</apellido2>
</trabajador>
</empresa>
</listado>
(1431
(1431
43143
43143
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Finalmente indicar que se pueden enlazar más de dos tablas a través de sus campos
relacionados. Ejemplo:
(1441
(1441
4414
4414
4) 4)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Sin embargo no siempre las tablas tienen ese tipo de relación, por ejemplo:
EMPLEADOS
Empleado Sueldo
Antonio 18000
Marta 21000
Sonia 15000
CATEGORIAS
categoría Sueldo mínimo Sueldo máximo
D 6000 11999
C 12000 17999
B 18000 20999
A 20999 80000
La forma sería:
(1451
(1451
4514
45145
5) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
CROSS JOIN
Utilizando la opción CROSS JOIN se realiza un producto cruzado entre las tablas indicadas.
Eso significa que cada tupla de la primera tabla se combina con cada tupla de la segunda
tabla. Es decir si la primera tabla tiene 10 filas y la segunda otras 10, como resultado se
obtienen 100 filas, resultado de combinar todas entre sí. Ejemplo:
Hay que asegurarse de que sólo son las claves principales y secundarias de las tablas
relacionadas, las columnas en las que el nombre coincide, de otro modo fallaría la
asociación y la consulta no funcionaría.
JOIN USING
Permite establecer relaciones indicando qué columna (o columnas) común a las dos
tablas hay que utilizar:
(1461
(1461
4614
4614
6) 6)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
piezas.modelo=existencias.modelo);
Sólo aparecen piezas presentes en la tabla de existencias. Si hay piezas que no están en
existencias, éstas no aparecen (y si hay existencias que no están en la tabla de piezas,
tampoco salen).
Por ello se permite utilizar relaciones laterales o externas (outer join). Su sintaxis
es:
...
{LEFT | RIGHT | FULL} OUTER JOIN tabla
{ON(condición) | USING (expresion)}
...
Obtiene los datos de las piezas estén o no relacionadas con datos de la tabla de existencias
(la tabla LEFT sería piezas por que es la que está a la izquierda del JOIN).
En la consulta anterior, si el LEFT lo cambiamos por un RIGHT, aparecerán las
existencias no presentes en la tabla piezas (además de las relacionadas en ambas
tablas).
La condición FULL OUTER JOIN produciría un resultado en el que aparecen los registros
no relacionados de ambas tablas (piezas sin existencias relacionadas y viceversa).
consultas de no coincidentes
Un caso típico de uso de las relaciones externas es el uso de consultas de no coincidentes.
Estas consultas sustituyen de forma más eficiente al operador NOT IN (se explica más
adelante) ya que permiten comprobar filas de una tabla que no están presentes en una
segunda tabla que se relaciona con la primera a través de alguna clave secundaria.
Por ejemplo supongamos que tenemos una base de datos que posee una tabla de
empresas y otra de trabajadores de las empresas. Ambas tablas supongamos que se
relacionan a través del CIF de la empresa. Si existen empresas de las que no tenemos
ningún trabajador podremos saberlo mediante esta consulta:
(1471
(1471
4714
47147
7) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
(4.7) agrupaciones
Es muy común utilizar consultas en las que se desee agrupar los datos a fin de realizar
cálculos en vertical, es decir calculados a partir de datos de distintos registros.
Para ello se utiliza la cláusula GROUP BY que permite indicar en base a qué registros
se realiza la agrupación. Con GROUP BY la instrucción SELECT queda de esta forma:
SELECT listaDeExpresiones
FROM listaDeTablas
[JOIN tablasRelacionadasYCondicionesDeRelación]
[WHERE condiciones]
[GROUP BY grupos]
[HAVING condicionesDeGrupo]
[ORDER BY columnas];
En el apartado GROUP BY, se indican las columnas por las que se agrupa. La función de
este apartado es crear un único registro por cada valor distinto en las columnas del grupo.
Si por ejemplo agrupamos en base a las columnas tipo y modelo en una tabla de
existencias, se creará un único registro por cada tipo y modelo distintos:
SELECT tipo,modelo
FROM existencias
GROUP BY tipo,modelo;
(1481
(1481
4814
48148
8) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
TI MODELO
AR 6
AR 9
AR 15
AR 20
BI 10
BI 38
Función Significado
COUNT(*) Cuenta los elementos de un grupo. Se utiliza el
asterisco para no tener que indicar un nombre
de columna concreto, el resultado es el mismo
para cualquier columna
SUM(expresión) Suma los valores de la expresión
AVG(expresión) Calcula la media aritmética sobre la expresión
indicada
MIN(expresión) Mínimo valor que toma la expresión indicada
MAX(expresión) Máximo valor que toma la expresión indicada
STDDEV(expresión) Calcula la desviación estándar
VARIANCE(expresión) Calcula la varianza
(1491
(1491
4914
4914
9) 9)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Todas las funciones de la tabla anterior se calculan para cada elemento del grupo, así la
expresión:
SELECT tipo,modelo, cantidad, SUM(Cantidad)
FROM existencias
GROUP BY tipo,modelo;
TI MODELO SUM(CANTIDAD)
AR 6 10530
AR 9 4928
AR 15 5667
AR 20 43
BI 10 363
BI 38 1740
WHERE SUM(Cantidad)>500
*
ERROR en línea 3:
ORA-00934: función de grupo no permitida aquí
La razón es que Oracle calcula primero el WHERE y luego los grupos; por lo que esa
condición no la puede realizar al no estar establecidos los grupos.
Por ello se utiliza la cláusula HAVING, que se ejecuta una vez realizados los grupos.
Se usaría de esta forma:
(1501
(1501
5015
5015
0) 0)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
FROM existencias
WHERE tipo!='AR'
GROUP BY tipo,modelo
HAVING SUM(Cantidad)>500;
(4.8) subconsultas
(4.8.1) uso de subconsultas simples
Se trata de una técnica que permite utilizar el resultado de una tabla SELECT en otra
consulta SELECT. Permite solucionar consultas que requieren para funcionar el resultado
previo de otra consulta.
La sintaxis es:
SELECT listaExpresiones
FROM tabla
WHERE expresión OPERADOR
(SELECT listaExpresiones
FROM tabla);
(1511
(15115
51151
1151)
)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
La última consulta obtiene los empleados cuyas pagas estén entre lo que gana Luís
(1870 euros) y lo que gana Martina (2500) .
Las subconsultas siempre se deben encerrar entre paréntesis y se debería colocar a
la derecha del operador relacional. Una subconsulta que utilice los valores >,<,>=,... tiene
que devolver un único valor, de otro modo ocurre un error. Además tienen que tener el
mismo tipo de columna para relacionar la subconsulta con la consulta que la utiliza (no
puede ocurrir que la subconsulta tenga dos columnas y ese resultado se compare usando
una sola columna en la consulta general).
(1521
(1521
52152
52152
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Instrucción Significado
ANY Compara con cualquier registro de la
subconsulta. La instrucción es válida si hay un
registro en la subconsulta que permite que la
comparación sea cierta
ALL Compara con todos los registros de la consulta.
La instrucción resulta cierta si es cierta toda
comparación con los registros de la subconsulta
IN No usa comparador, ya que sirve para comprobar
si un valor se encuentra en el resultado de la
subconsulta
NOT IN Comprueba si un valor no se encuentra en una
subconsulta
Ejemplo:
En ese caso se obtienen los nombres de los empleados cuyos dni están en la tabla de
directivos.
Si se necesita comprobar dos columnas en una consulta IN, se hace:
(1531
(1531
53153
53153
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Esta consulta devuelve las piezas que se encuentran en la tabla de existencias (es igual
al ejemplo comentado en el apartado subconsultas sobre múltiples valores). La consulta
contraria es :
Normalmente las consultas EXISTS se pueden realizar de alguna otra forma con los
operadores ya comentados.
(4.9.2) intersecciones
De la misma forma, la palabra INTERSECT permite unir dos consultas SELECT de modo que
el resultado serán las filas que estén presentes en ambas consultas.
Ejemplo; tipos y modelos de piezas que se encuentren sólo en los almacenes 1 y 2:
(4.9.3) diferencia
Con MINUS también se combinan dos consultas SELECT de forma que aparecerán los
registros del primer SELECT que no estén presentes en el segundo.
(1541
(1541
5415
54154
4) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
(SELECT....
.... UNION
SELECT....
...
)
MINUS
SELECT.... /* Primero se hace la unión y luego la diferencia*/
Aparece el número de cada fila en la posición de la tabla. Esa función actualiza sus
valores usando subconsultas de modo que la consulta:
Puesto que la consulta SELECT edad, nombre FROM clientes ORDER BY edad DESC,
obtiene una lista de los clientes ordenada por edad, el SELECT superior obtendrá esa
lista pero mostrando el orden de las filas en esa consulta. Eso permite hacer consultas
el tipo top-n, (los n más....).
Por ejemplo para sacar el top-10 de la edad de los clientes (los 10 clientes más
mayores):
(1551
(1551
55155
55155
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
EMPLEADO JEFE
Antonio Ángel
Ángel
Eva Ángel
Carmen Eva
Andrés Eva
Carmelo Andrés
En el ejemplo se observa como un jefe puede tener otro jefe, generando una estructura
jerárquica:
Ángel
Antonio Eva
Carm en Andrés
Carm elo
En este tipo de estructuras, a veces se requieren consultas que muestren todos los
empleados de un jefe, mostrando los mandos intermedios. Se trata de una consulta que
recorre ese árbol. Este tipo de consultas posee esta sintaxis:
El apartado CONNECT permite indicar qué relación hay que seguir para recorrer el
árbol. La palabra PRIOR indica hacia dónde se dirige el recorrido. Finalmente el
apartado START indica la condición de inicio del recorrido (normalmente la condición
(1561
(1561
5615
56156
6) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
que permita buscar el nodo del árbol por el que comenzamos el recorrido, es decir sirve
para indicar desde donde comenzamos. Ejemplo:
Resultado:
NOMBRE
Andrés
Eva
Ángel
Sin embargo:
NOMBRE
Ángel
Antonio
Eva
Carmen
Andrés
Carmelo
El modificador LEVEL permite mostrar el nivel en el árbol jerárquico de cada elemento:
SELECT LEVEL, nombre FROM empleados
START WITH nombre='Ángel'
CONNECT BY n_jefe= PRIOR n_empleado;
(1571
(1571
57157
57157
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Resultado:
LEVEL NOMBRE
1 Ángel
2 Antonio
2 Eva
3 Carmen
3 Andrés
4 Carmelo
Para esos casos disponemos de la cláusula NOCYCLE que controla los resultados
repetidos y evita esos caminos. En cualquier caso consultas en datos no jerarquizados en
forma de árbol sino en forma de grafo (como el comentado ejemplo de las redes sociales),
pueden ocupar muchísimo tiempo a Oracle por lo que no es mala idea pensar en otra
solución con ayuda de PL/SQL (lenguaje que se comenta en estos mismos apuntes).
SELECT DISTINCT amigo FROM contactos
START WITH nombre='Ángel'
CONNECT BY NOCYCLE PRIOR amigo=nombre; -- Ahora sí
(1581
(1581
58158
58158
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Por cierto, el DISTINCT impide que aparezcan muchas veces las mismas personas. Ya
que pueden ser amigos de muchos de mis amigos (e incluso de muchos de los amigos de
mis amigos).
Esta consulta suma las cantidades de la tabla existencias por cada tipo y modelo
distinto. Si añadimos:
Entonces nos añade un registro para cada tipo en el que aparece la suma del total para
ese tipo. Al final mostrará un registro con el total absoluto. Es decir el resultado de esa
consulta es:
TI MODELO SUM(CANTIDAD)
AR 6 10530
AR 9 4928
AR 15 5667
AR 20 43
AR 21168
BI 10 363
BI 38 1740
BI 57 1638
BI 3741
CL 12 7000
CL 15 3068
CL 18 6612
CL 16680
EM 21 257
EM 42 534
EM 791
(1591
(1591
5915
59159
9) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
TI MODELO SUM(CANTIDAD)
PU 5 12420
PU 9 7682
PU 20102
TO 6 464
TO 9 756
TO 10 987
TO 12 7740
TO 16 356
TO 10303
TU 6 277
TU 9 876
TU 10 1023
TU 12 234
TU 16 654
TU 3064
75849
Se pueden unir varias columnas entre paréntesis para tratarlas como si fueran una
unidad:
(4.11.2) CUBE
Es muy similar al anterior, sólo que este calcula todos los subtotales relativos a la
consulta. Ejemplo:
Resulta:
TI MODELO SUM(CANTIDAD)
75849
5 12420
6 11271
(1601
(1601
6016
6016
0) 0)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
TI MODELO SUM(CANTIDAD)
9 14242
10 2373
12 14974
15 8735
16 1010
18 6612
20 43
21 257
38 1740
42 534
57 1638
AR 21168
AR 6 10530
AR 9 4928
AR 15 5667
AR 20 43
BI 3741
BI 10 363
BI 38 1740
BI 57 1638
CL 16680
CL 12 7000
CL 15 3068
CL 18 6612
EM 791
EM 21 257
EM 42 534
PU 20102
PU 5 12420
PU 9 7682
TO 10303
TO 6 464
TO 9 756
TO 10 987
TO 12 7740
TO 16 356
(1611
(1611
61161
61161
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
TI MODELO SUM(CANTIDAD)
TU 3064
TU 6 277
TU 9 876
TU 10 1023
TU 12 234
TU 16
(4.11.3) GROUPING
Se trata de una función que funciona con ROLLUP y CUBE y que recibe uno o más
campos e indica si la fila muestra un subtotal referido a los campos en cuestión. Si la
fila es un subtotal de esos campos pone 1, sino lo marca con 0. Ejemplo:
Sale:
(1621
(1621
6216
62162
2) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
(1631
(1631
63163
63163
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
SELECT...
...
GROUP BY GROUPING SETS (listaDeCampos1) [,(lista2)...]
Las listas indican los campos por los que se realiza la agrupación. Ejemplo:
(1641
(1641
6416
6416
4) 4)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Que mostraría un informe espectacular sobre las tablas anteriores. Así como:
(1651
(1651
6516
65165
5) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Sintaxis:
Ejemplo:
Lógicamente las columnas del SELECT se tienen que corresponder con las columnas a
rellenar mediante INSERT (observar las flechas).
UPDATE empleados
SET sueldo=sueldo*1.10
WHERE id_seccion =(SELECT id_seccion FROM secciones
WHERE nom_seccion='Producción');
UPDATE empleados
SET puesto_trabajo=(SELECT puesto_trabajo
FROM empleados
WHERE id_empleado=12)
WHERE seccion=23;
Esta instrucción coloca a todos los empleados de la sección 23 el mismo puesto de trabajo
que el empleado número 12. Este tipo de actualizaciones sólo son válidas si el subselect
devuelve un único valor, que además debe de ser compatible con la columna que se
actualiza.
Hay que tener en cuenta que las actualizaciones no pueden saltarse las reglas de
integridad que posean las tablas.
(1661
(1661
6616
6616
6) 6)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
DELETE empleados
WHERE id_empleado IN
(SELECT id_empleado FROM errores_graves);
En este caso se trata de una subconsulta creada con el operador IN, se eliminarán los
empleados cuyo identificador esté dentro de la tabla de errores graves.
(4.13) vistas
(4.13.1) introducción
Una vista no es más que una consulta almacenada a fin de utilizarla tantas veces como
se desee. Una vista no contiene datos sino la instrucción SELECT necesaria para crear la
vista, eso asegura que los datos sean coherentes al utilizar los datos almacenados en las
tablas. Por todo ello, las vistas gastan muy poco espacio de disco.
Las vistas se emplean para:
Realizar consultas complejas más fácilmente, ya que permiten dividir la
consulta en varias partes
Proporcionar tablas con datos completos
Utilizar visiones especiales de los datos
Ser utilizadas como tablas que resumen todos los datos
Ser utilizadas como cursores de datos en los lenguajes procedimentales (como
PL/SQL)
(1671
(1671
67167
67167
) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
Lo bueno de las vistas es que tras su creación se utilizan como si fueran una tabla.
Ejemplo:
AS
( SELECT l.id_localidad, l.nombre, l.poblacion,
n_provincia, p.nombre, p.superficie, l2.nombre,
id_comunidad, c.nombre, l3.nombre
FROM localidades l
JOIN provincias p USING (n_provincia)
JOIN comunidades c USING (id_comunidad)
JOIN localidades l2 ON (p.id_capital=l2.id_localidad)
JOIN localidades l3 ON (c.id_capital=l3.id_localidad)
);
(1681
(1681
6816
68168
8) )
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 4) SQL (II). Consultas autor: Jorge Sánchez – www.jorgesanchez.net
La columna TEXT de esa vista contiene la sentencia SQL que se utilizó para crear la
vista (sentencia que es ejecutada cada vez que se invoca a la vista).
(1691
(1691
6916
6916
9) 9)
(5)
PL/SQL
(5.1) introducción al SQL procedimental
Casi todos los grandes Sistemas Gestores de Datos incorporan utilidades que permiten
ampliar el lenguaje SQL para producir pequeñas utilidades que añaden al SQL mejoras
de la programación estructurada (bucles, condiciones, funciones,....). La razón es que hay
diversas acciones en la base de datos para las que SQL no es suficiente.
Por ello todas las bases de datos incorporan algún lenguaje de tipo procedimental
(de tercera generación) que permite manipular de forma más avanzada los datos de la
base de datos.
PL/SQL es el lenguaje procedimental que es implementado por el precompilador de
Oracle. Es una extensión procedimental del lenguaje SQL; es decir, se trata de un lenguaje
creado para dar a SQL nuevas posibilidades. Esas posibilidades permiten utilizar
condiciones y bucles al estilo de los lenguajes de tercera generación (como Basic,
Cobol, C++, Java, etc.).
En otros sistemas gestores de bases de datos existen otros lenguajes
procedimentales: SQL Server utiliza Transact SQL, Informix usa Informix 4GL,...
Lo interesante del lenguaje PL/SQL es que integra SQL por lo que gran parte de su
sintaxis procede de dicho lenguaje.
PL/SQL es un lenguaje pensado para la gestión de datos. La creación de aplicaciones
sobre la base de datos se realiza con otras herramientas (Oracle Developer) o lenguajes
externos como Visual Basic o Java. El código PL/SQL puede almacenarse:
En la propia base de datos
En archivos externos
(169)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
(1701
(1701
70)70)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
La estructura en sí es:
[DECLARE
declaraciones ]
BEGIN
instrucciones ejecutables
[EXCEPTION
instrucciones de manejo de errores ]
END;
A los bloques se les puede poner nombre usando (así se declara un procedimiento):
PROCEDURE nombre IS
bloque
FUNCTION nombre
RETURN tipoDedatos IS
bloque
(17117
(17117
1) 1)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
DECLARE
v NUMBER := 17;
BEGIN
/* Este es un comentario que
ocupa varias líneas */
v:=v*2; -- este sólo ocupa esta línea
DBMS_OUTPUT.PUT_LINE(v) -- escribe 34
END;
(5.3) variables
(5.3.1) uso de variables
declarar variables
Las variables se declaran en el apartado DECLARE del bloque. PL/SQL no acepta
entrada ni salida de datos por sí mismo (para conseguirlo se necesita software auxiliar).
La sintaxis de la declaración de variables es:
DECLARE
identificador [CONSTANT] tipoDeDatos [:= valorInicial];
[siguienteVariable…]
Ejemplos:
DECLARE
pi CONSTANT NUMBER(9,7):=3.1415927;
radio NUMBER(5);
area NUMBER(14,2) := 23.12;
El operador := sirve para asignar valores a una variable. Este operador permite
inicializar la variable con un valor determinado. La palabra CONSTANT indica que la
variable no puede ser modificada (es una constante). Si no se inicia la variable, ésta
contendrá el valor NULL.
Los identificadores de Oracle deben de tener 30 caracteres, empezar por letra y
continuar con letras, números o guiones bajos (_) (también vale el signo de dólar ($) y
la almohadilla (#). No debería coincidir con nombres de columnas de las tablas ni con
palabras reservadas (como SELECT).
En PL/SQL sólo se puede declarar una variable por línea.
(1721
(1721
72)72)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
nom personas.nombre%TYPE;
precio NUMBER(9,2);
precio_iva precio%TYPE;
(17317
(1731
3) 73)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
(5.3.2) DBMS_OUTPUT.PUT_LINE
Para poder mostrar datos (fechas, textos y números), Oracle proporciona una función
llamada put_line en el paquete dbms_output. Ejemplo:
DECLARE
a NUMBER := 17;
BEGIN
DBMS_OUTPUT.PUT_LINE(a);
END;
Hay que tener en cuenta que las variables declaradas en un bloque concreto, son
eliminadas cuando éste acaba (con su END correspondiente).
Ejemplo:
DECLARE
v NUMBER := 2;
BEGIN v:=v*2;
DECLARE
z NUMBER := 3;
BEGIN
z:=v*3;
DBMS_OUTPUT.PUT_LINE(z); --escribe 12
DBMS_OUTPUT.PUT_LINE(v); --escribe 4
END;
DBMS_OUTPUT.PUT_LINE(v*2); --escribe 8
DBMS_OUTPUT.PUT_LINE(z); --error
END;
(1741
(1741
74)74)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
MOD(ABS(DBMS_RANDOM.RANDOM),10)+1
Entre 20 y 50 sería:
MOD(ABS(DBMS_RANDOM.RANDOM),31)+20
(17517
(1751
5) 75)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
SELECT listaDeCampos
INTO listaDeVariables
FROM tabla
[JOIN ...]
[WHERE condición]
DECLARE
v_salario NUMBER(9,2);
V_nombre VARCHAR2(50);
BEGIN
SELECT salario,nombre INTO v_salario, v_nombre
FROM empleados WHERE id_empleado=12344;
SYSTEM_OUTPUT.PUT_LINE(‘El nuevo salario será de ‘ ||
salario*1.2 || ‘euros’);
END;
(1761
(1761
76)76)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
(5.5.1) instrucción IF
Se trata de una sentencia tomada de los lenguajes estructurados. Desde esta sentencia
se consigue que ciertas instrucciones se ejecuten o no dependiendo de una condición
sentencia IF simple
Sintaxis:
IF condicion THEN
instrucciones
END IF;
IF departamento=134 THEN
salario := salario * 13;
departamento := 123;
END IF;
sentencia IF-THEN-ELSE
Sintaxis:
IF condición THEN
instrucciones
ELSE
instrucciones
END IF;
(17717
(1771
7) 77)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
sentencia IF-THEN-ELSIF
Cuando se utilizan sentencias de control es común desear anidar un IF dentro de otro IF.
Ejemplo:
IF saldo>90 THEN
DBMS_OUTPUT.PUT_LINE(‘Saldo mayor que el esperado’);
ELSE
IF saldo>0 THEN
DBMS_OUTPUT.PUT_LINE(‘Saldo menor que el esperado’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘Saldo NEGATIVO’);
END IF;
END IF;
IF condición1 THEN
instrucciones1
ELSIF condición2 THEN
instrucciones3
[ELSIF.... ]
[ELSE
instruccionesElse ]
END IF;
IF saldo>90 THEN
DBMS_OUTPUT.PUT_LINE(‘Saldo mayor que el esperado’);
ELSIF saldo>0 THEN
DBMS_OUTPUT.PUT_LINE(‘Saldo menor que el esperado’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘Saldo NEGATIVO’);
END IF;
(17817
(1781
8) 78)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
CASE selector
WHEN expresion1 THEN resultado1
WHEN expresion2 THEN resultado2
...
[ELSE resultadoElse]
END;
Ejemplo:
Hay que tener en cuenta que la sentencia CASE sirve para devolver un valor y no para
ejecutar una instrucción.
también se pueden escribir sentencias CASE más complicadas. Por ejemplo:
aprobado:= CASE
WHEN actitud='A' AND nota>=4 THEN TRUE
WHEN nota>=5 AND (actitud='B' OR actitud='C') THEN TRUE
WHEN nota>=7 THEN TRUE
ELSE FALSE
END;
(5.5.3) bucles
bucle LOOP
Se trata de una instrucción que contiene instrucción que se repiten indefinidamente (bucle
infinito). Se inicia con la palabra LOOP y finaliza con la palabra END LOOP y dentro de
esas palabras se colocan las instrucciones que se repetirán.
Lógicamente no tiene sentido utilizar un bucle infinito, por eso existe una
instrucción llamada EXIT que permite abandonar el bucle. Cuando Oracle encuentra esa
instrucción, el programa continua desde la siguiente instrucción al END LOOP.
Lo normal es colocar EXIT dentro de una sentencia IF a fin de establecer una condición
de salida del bucle. También se puede acompañar a la palabra EXIT de la
(1791
(1791
79)79)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
LOOP
instrucciones
...
EXIT [WHEN condición]
END LOOP;
DECLARE
cont NUMBER :=1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(cont);
EXIT WHEN cont=10;
cont:=cont+1;
END LOOP;
END;
bucle WHILE
Genera un bucle cuyas instrucciones se repiten mientras la condición que sigue a la
palabra WHILE sea verdadera. Sintaxis:
En este bucle es posible utilizar (aunque no es muy habitual en este tipo de bucle) la
instrucción EXIT o EXIT WHEN. La diferencia con el anterior es que este es más
estructurado (más familiar para los programadores de lenguajes como Basic, Pascal, C,
Java,...)
Ejemplo (escribir números del 1 al 10):
DECLARE
cont NUMBER :=1;
BEGIN
WHILE cont<=10 LOOP
DBMS_OUTPUT.PUT_LINE(cont);
cont:=cont+1;
END LOOP;
END;
(1801
(1801
80)80)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
bucle FOR
Se utilizar para bucles con contador, bucles que se recorren un número concreto de veces.
Para ello se utiliza una variable (contador) que no tiene que estar declarada en el
DECLARE, esta variable es declarada automáticamente en el propio FOR y se elimina
cuando éste finaliza.
Se indica el valor inicial de la variable y el valor final (el incremento irá de uno en
uno). Si se utiliza la cláusula REVERSE, entonces el contador cuenta desde el valor alto
al bajo restando 1.
Sintaxis:
bucles anidados
Se puede colocar un bucle dentro de otro sin ningún problema, puede haber un WHILE
dentro de un FOR, un LOOP dentro de otro LOOP, etc.
Hay que tener en cuenta que en ese caso, la sentencia EXIT abandonaría el bucle en
el que estamos:
El bucle más interior sólo cuenta hasta que j vale 5 ya que la instrucción EXIT abandona
el bucle más interior cuando j llega a ese valor.
No obstante hay una variante de la instrucción EXIT que permite salir incluso del bucle
más exterior. Eso se consigue poniendo una etiqueta a los bucles que se deseen. Una
etiqueta es un identificador que se coloca dentro de los signos << y >> delante del bucle.
Eso permite poner nombre al bucle.
Por ejemplo:
<<buclei>>
FOR i IN 1..10 LOOP
FOR j IN 1..30 LOOP
EXIT buclei WHEN j=5;
...
END LOOP;
...
END LOOP buclei;
(18118
(18118
1) 1)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
(5.6) cursores
(5.6.1) introducción
Los cursores representan consultas SELECT de SQL que devuelven más de un resultado y
que permiten el acceso a cada fila de dicha consulta. Lo cual significa que el cursor
siempre tiene un puntero señalando a una de las filas del SELECT que representa el cursor.
Se puede recorrer el cursor haciendo que el puntero se mueva por las filas. Los
cursores son las herramientas fundamentales de PL/SQL
CURSOR cursorProvincias IS
SELECT p.nombre, SUM(poblacion) AS poblacion
FROM localidades l
JOIN provincias p USING (n_provincia)
GROUP BY p.nombre;
(1821
(1821
82)82)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Una instrucción FETCH lee una sola fila y su contenido lo almacena en variables. Por
ello se usa siempre dentro de bucles a fin de poder leer todas las filas de un cursor:
LOOP
FETCH cursorProvincias INTO (v_nombre, v_poblacion);
EXIT WHEN... --aquí se pondría la condición de salida
... --instrucciones de proceso de los datos del cursor
END LOOP;
(18318
(1831
3) 83)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
DECLARE
CURSOR cursorProvincias IS
SELECT p.nombre, SUM(poblacion) AS poblacion
FROM LOCALIDADES l
JOIN PROVINCIAS p USING (n_provincia)
GROUP BY p.nombre;
v_nombre PROVINCIAS.nombre%TYPE;
v_poblacion LOCALIDADES.poblacion%TYPE;
BEGIN
OPEN cursorProvincias;
LOOP
FETCH cursorProvincias INTO v_nombre,
v_poblacion;
EXIT WHEN cursorProvincias%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_nombre || ',' ||
v_poblacion);
END LOOP;
CLOSE cursorProvincias;
END;
En el ejemplo anterior se recorre el cursor hasta que el FETCH no devuelve ninguna fila.
Lo que significa que el programa anterior muestra el nombre de cada provincia seguida
de una coma y de la población de la misma.
%FOUND
Instrucción contraria a la anterior, devuelve verdadero si el último FETCH devolvió una
fila.
%ROWCOUNT
Indica el número de filas que se han recorrido en el cursor (inicialmente vale cero). Es
decir, indica cuántos FETCH se han aplicado sobre el cursor.
(1841
(1841
84)84)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Sintaxis:
nombreVariableDeRegistro nombreTipoRegistro;
Ejemplo:
alvaro.nombre := 'Alvaro';
(1851
(1851
85)85)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
alvaro.fecha_nac := TO_DATE(‘2/3/2004’);
%ROWTYPE
Al declarar registros, se puede utilizar el modificador %ROWTYPE que sirve para asignar
a un registro la estructura de una tabla. Por ejemplo:
DECLARE
regPersona personas%ROWTYPE;
personas debe ser una tabla. regPersona es un registro que constará de los mismos
campos y tipos que las columnas de la tabla personas.
DECLARE
CURSOR cursorProvincias IS
SELECT p.nombre, SUM(poblacion) AS poblacion
FROM LOCALIDADES l
JOIN PROVINCIAS p USING (n_provincia)
GROUP BY p.nombre;
rProvincias cursorProvincias%ROWTYPE;
BEGIN
OPEN cursorProvincias;
LOOP
FETCH cursorProvincias INTO rProvincias; EXIT WHEN
cursorProvincias%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(rProvincias.nombre || ‘,’ ||
rProvincias.poblacion);
END LOOP;
CLOSE cursorProvincias;
END;
bucle FOR de recorrido de cursores
Es la forma más habitual de recorrer todas las filas de un cursor. Es un bucle FOR que se
encarga de realizar tres tareas:
(1) Abre un cursor (realiza un OPEN implícito sobre el cursor antes de empezar el
bucle)
(1861
(1861
86)86)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
(2) Recorre todas las filas de un cursor (cada vez que se entra en el interior del FOR
se genera un FETCH implícito) y en cada vuelta del bucle almacena el contenido
de cada fila en una variable de registro. La variable de registro utilizada en el bucle
FOR no se debe declarar en la zona DECLARE; se crea al inicio del bucle y se
elimina cuando éste finaliza.
(3) Cierra el cursor (cuando finaliza el FOR)
Sintaxis:
OPEN cursor;
LOOP
FETCH cursor INTO variableRegistro;
EXIT WHEN cursor%NOTFOUND;
...instrucciones
END LOOP;
DECLARE
CURSOR cursorProvincias IS
SELECT p.nombre, SUM(poblacion) AS poblacion
FROM LOCALIDADES l
JOIN PROVINCIAS p USING (n_provincia)
GROUP BY p.nombre;
BEGIN
FOR rProvincias IN cursorProvincias LOOP
DBMS_OUTPUT.PUT_LINE(rProvincias.nombre || ‘,’ ||
rProvincias.poblacion);
END LOOP;
END;
Naturalmente este código es más sencillo de utilizar y más corto que los anteriores.
(18718
(1871
7) 87)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Para hacer que el cursor varíe según esos parámetros, se han de indicar los mismos
en la declaración del cursor. Para ello se pone entre paréntesis su nombre y tipo tras el
nombre del cursor en la declaración.
Ejemplo:
DECLARE
CURSOR cur_personas(dep NUMBER, pue VARCHAR2(20)) IS
SELECT nombre, apellidos
FROM empleados
WHERE departamento=dep AND puesto=pue;
BEGIN
OPEN cur_personas(12,’administrativo’);
.....
CLOSE cur_personas;
END
Es al abrir el. cursor cuando se indica el valor de los parámetros, lo que significa que se
puede abrir varias veces el cursor y que éste obtenga distintos resultados dependiendo del
valor del parámetro.
Se pueden indicar los parámetros también en el bucle FOR:
DECLARE
CURSOR cur_personas(dep NUMBER, pue VARCHAR2(20)) IS
SELECT nombre, apellidos
FROM empleados
WHERE departamento=dep AND puesto=pue;
BEGIN
FOR r IN cur_personas(12,'administrativo') LOOP
.....
END LOOP;
END
(1881
(1881
88)88)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Sintaxis:
CURSOR ...
SELECT...
FOR UPDATE [OF campo] [NOWAIT]
Ejemplo:
DECLARE
CURSOR c_emp IS
SELECT id_emp, nombre, n_departamento, salario
FROM empleados, departamentos
WHERE empleados.id_dep=departamentos.id_dep
AND empleados.id_dep=80
FOR UPDATE OF salario NOWAIT ;
A continuación en la instrucción UPDATE que modifica los registros se puede utilizar una
nueva cláusula llamada WHERE CURRENT OF seguida del nombre de un cursor, que hace
que se modifique sólo el registro actual del cursor.
Ejemplo:
(5.7) excepciones
(5.7.1) introducción
Se llama excepción a todo hecho que le sucede a un programa que causa que la
ejecución del mismo finalice. Lógicamente eso causa que el programa termine de forma
anormal.
Las excepciones se debe a:
Que ocurra un error detectado por Oracle (por ejemplo si un SELECT no
devuelve datos ocurre el error ORA-01403 llamado NO_DATA_FOUND).
Que el propio programador las lance (comando RAISE).
(1891
(1891
89)89)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
DECLARE
sección de declaraciones
BEGIN
instrucciones
EXCEPTION
WHEN excepción1 [OR excepción2 ...] THEN
instrucciones que se ejcutan si suceden esas excepciones
[WHEN excepción3 [OR...] THEN
instrucciones que se ejcutan si suceden esas excepciones]
[WHEN OTHERS THEN
instrucciones que se ejecutan si suceden otras
excepciones]
END;
(1901
(1901
90)90)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
(1911
(1911
91)91)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
DECLARE
x NUMBER :=0;
y NUMBER := 3;
res NUMBER;
BEGIN
res:=y/x;
DBMS_OUTPUT.PUT_LINE(res);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('No se puede dividir por cero') ;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error inesperado') ;
END;
(2) Asociar ese nombre al número de error correspondiente mediante esta sintaxis
en el apartado DECLARE (tras la instrucción del paso 1):
PRAGMA EXCEPTION_INIT(nombreDeExcepción, nºDeExcepción);
(1921
(1921
92)92)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
DECLARE
e_integridad EXCEPTION;
PRAGMA EXCEPTION_INIT(e_integridad, -2292);
BEGIN
DELETE FROM piezas WHERE tipo='TU' AND modelo=6;
EXCEPTION
WHEN e_integridad THEN
DBMS_OUTPUT.PUT_LINE(‘No se puede borrar esa pieza’ ||
‘ porque tiene existencias relacionadas’);
END;
Ejemplo:
EXCEPTION
...
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(‘Ocurrió el error ‘ ||
SQLCODE ||‘mensaje: ‘ || SQLERRM);
END;
(1931
(1931
93)93)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
DECLARE
BEGIN
DELETE FROM piezas WHERE tipo='ZU' AND modelo=26;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20001,'No existe esa pieza');
END IF;
END;
(5.8) procedimientos
(5.8.1) introducción
Un procedimiento es un bloque PL/SQL al que se le asigna un nombre. Un procedimiento
se crea para que realice una determinada tarea de gestión.
Los procedimientos son compilados y almacenados en la base de datos. Gracias a
ellos se consigue una reutilización eficiente del código, ya que se puede invocar al
procedimiento las veces que haga falta desde otro código o desde una herramienta de
desarrollo como Oracle Developer. Una vez almacenados pueden ser modificados de
nuevo.
(1941
(1941
94)94)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL
{IS|AS} autor: Jorge Sánchez – www.jorgesanchez.net
(1951
(1951
95)95)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
secciónDeDeclaraciones
BEGIN
instrucciones
[EXCEPTION
controlDeExcepciones]
END;
La opción REPLACE hace que si ya existe un procedimiento con ese nombre, se reemplaza
con el que se crea ahora. Los parámetros son la lista de variables que necesita el
procedimiento para realizar su tarea.
Al declarar cada parámetro se indica el tipo de los mismos, pero no su tamaño; es decir
sería VARCHAR2 y no VARCHAR2(50).
El apartado opcional modelo, se elige si el parámetro es de tipo IN, OUT o IN OUT
(se explica más adelante).
No se utiliza la palabra DECLARE para indicar el inicio de las declaraciones. No
obstante la sección de declaraciones figura tras las palabras IS o AS (es decir justo antes
del BEGIN es donde debemos declarar las variables).
(5.8.4) parámetros
Los procedimientos permiten utilizar parámetros para realizar su tarea. Por ejemplo
supongamos que queremos crear el procedimiento ESCRIBIR para escribir en el servidor
(como hace DBMS_OUTPUT.PUT_LINE) lógicamente dicho procedimiento necesita
saber lo que queremos escribir. Ese sería el parámetro, de esa forma el procedimiento
sería:
(1961
(1961
96)96)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Para invocarle:
BEGIN
...
Escribir(‘Hola’);
(1971
(1971
97)97)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
||‘ datos');
END;
El procedimiento consulta las empresas cuyo nombre tenga el texto envíado en v_nombre,
captura los posibles errores y en caso de que la consulta sea buena almacena el
cif y la dirección de la empresa en los parámetros v_CIF y v_dir.
La llamada al procedimiento anterior podría ser:
DECLARE
v_c VARCHAR2(50);
v_d VARCHAR2(50);
BEGIN
consultarEmpresa('Hernández',v_c,v_d);
DBMS_OUTPUT.PUT_LINE(v_c);
DBMS_OUTPUT.PUT_LINE(v_d);
END;
Las variables v_c y v_d almacenarán (si existe una sola empresa con el texto
Hernández) el CIF y la dirección de la empresa buscada.
Los procedimientos no pueden leer los valores que posean las variables OUT, sólo
escribir en ellas. Si se necesitan ambas cosas es cuando hay que declararlas con IN OUT.
(5.9) funciones
(5.9.1) introducción
Las funciones son un tipo especial de procedimiento que sirven para calcular un
determinado valor. Todo lo comentado en el apartado anterior es válido para las
funciones, la diferencia estriba sólo en que éstas devuelven un valor.
(1981
(1981
98)98)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
(5.9.2) sintaxis
CREATE [OR REPLACE] FUNCTION nombreFunción
[(parámetro1 [modelo] tipoDatos
[,parámetro2 [modelo] tipoDatos [,...]])]
RETURN tipoDeDatos
IS|AS
secciónDeDeclaraciones
BEGIN
instrucciones
[EXCEPTION
controlDeExcepciones]
END;
(1991
(1991
99)99)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
BEGIN
DBMS_OUTPUT.PUT_LINE(cuadrado(9));
END;
Las funciones de PL/SQL se utilizan como las funciones de cualquier lenguaje estructurado,
se pueden asignar a una variable, utilizar para escribir, etc. Además dentro de una
función se puede invocar a otra función.
Esta función devuelve el precio medio de la tabla de piezas. Una vez compilada y
almacenada la función, se puede invocar desde una instrucción SQL cualquiera.
Por ejemplo:
Esa consulta obtiene los datos de las piezas cuyo precio sea menor que el precio medio.
Hay que tener en cuenta que para que las funciones puedan ser invocadas desde SQL,
éstas tienen que cumplir que:
Sólo valen funciones que se hayan almacenado
Sólo pueden utilizar parámetros de tipo IN
Sus parámetros deben ser de tipos compatibles con el lenguaje SQL (no valen
tipos específicos de PL/SQL como BOOLEAN por ejemplo)
El tipo devuelto debe ser compatible con SQL
No pueden contener instrucciones DML
Si una instrucción DML modifica una determinada tabla, en dicha instrucción no
se puede invocar a una función que realice consultas sobre la misma tabla
No pueden utilizar instrucciones de transacciones (COMMIT, ROLLBACK,...)
(200
(200
200)
200)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
La función no puede invocar a otra función que se salte alguna de las reglas
anteriores.
(5.9.6) recursividad
En PL/SQL la recursividad (el hecho de que una función pueda llamarse a sí misma) está
permitida. Este código es válido:
(5.10) paquetes
(5.10.1) introducción
Los paquetes sirven para agrupar bajo un mismo nombre funciones y procedimientos.
Facilitan la modularización de programas y su mantenimiento.
Los paquetes constan de dos partes:
Especificación. Que sirve para declarar los elementos de los que consta el
paquete. En esta especificación se indican los procedimientos, funciones y
variables públicos del paquete (los que se podrán invocar desde fuera del
paquete). De los procedimientos sólo se indica su nombre y parámetros (sin el
cuerpo).
Cuerpo. En la que se especifica el funcionamiento del paquete. Consta de la
definición de los procedimientos indicados en la especificación. Además se
pueden declarar y definir variables y procedimientos privados (sólo visibles
para el cuerpo del paquete, no se pueden invocar desde fuera del mismo).
(2002
(2002
00)00)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
De las funciones hay que indicar sus parámetros y el tipo de datos que devuelve.
cuerpo
(2012
(2012
01)01)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Ejemplo:
FUNCTION devolver_cont
IS
BEGIN
RETURN v_cont;
END devolver_cont;
END paquete1;
uso de los objetos definidos en los paquetes
Desde dentro del paquete, para utilizar otra función o procedimiento o variable dentro
del mismo paquete, basta con invocarla por su nombre.
Si queremos utilizar un objeto de un paquete, fuera del mismo, entonces se
antepone el nombre del paquete a la función. Por ejemplo paquete1.reset_cont(4) (en
el ejemplo anterior).
Para ejecutar un paquete desde SQL*Plus, se usa la orden EXECUTE. Por ejemplo:
EXECUTE paquete1.reset_cont(4)
uso de cursores en los paquetes
Además las variables, en la cabecera del paquete se pueden definir cursores. Para ello
se indica el nombre del cursor, los parámetros (si hay) y el tipo devuelto (normalmente
con %ROWTYPE).
En el cuerpo del paquete el cursor se usa como habitualmente. La única razón para
declarar un cursor en un paquete, es por si necesitamos acceder a él desde fuera.
Eso mismo ocurre con las variables, las variables declaradas en la especificación de
un paquete, son accesibles desde fuera del paquete (habría que invocarlas escribiendo
paquete.variable)
(5.11) triggers
(5.11.1) introducción
Se llama trigger (o disparador) al código que se ejecuta automáticamente cuando se
realiza una determinada acción sobre la base de datos. El código se ejecuta
independientemente de la aplicación que realizó dicha operación.
De esta forma tenemos tres tipos triggers:
Triggers de tabla. Se trata de triggers que se disparan cuando ocurre una
acción DML sobre una tabla.
Triggers de vista. Se lanzan cuando ocurre una acción DML sobre una vista.
(2022
(2022
02)02)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
En este manual sólo se da cabida a los del primer y segundo tipo. Por lo que se dará
por hecho en todo momento que nos referiremos siempre a ese tipo de triggers.
(2032
(2032
03)03)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Los eventos asocian el trigger al uso de una instrucción DML. En el caso de la instrucción
UPDATE, el apartado OF hace que el trigger se ejecute sólo cuando se modifique la
columna indicada (o columnas si se utiliza una lista de columnas separada por comas).
En la sintaxis del trigger, el apartado OR permite asociar más de un evento al trigger (se
puede indicar INSERT OR UPDATE por ejemplo).
Ejemplo:
Este trigger impide que se puedan añadir registros a la tabla de personal si no estamos
entre las 10 y las 13 horas.
(2042
(2042
04)04)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
triggers de fila
Sintaxis:
(2052
(2052
05)05)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
Con este trigger cada vez que se modifiquen un registros de la tabla de piezas, siempre
y cuando se esté incrementado el precio, se añade una nueva fila por registro
modificado en la tabla de aditorías, observar el uso de NEW y de OLD y el uso de los dos
puntos (:NEW y :OLD) en la sección ejecutable.
Cuando se añaden registros, los valores de OLD son todos nulos. Cuando se borran
registros, son los valores de NEW los que se borran.
(2062
(2062
06)06)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
CREATE VIEW
existenciasCompleta(tipo,modelo,precio,
almacen,cantidad) AS
SELECT p.tipo, p.modelo, p.precio_venta,
e.n_almacen, e.cantidad
FROM PIEZAS p, EXISTENCIAS e
WHERE p.tipo=e.tipo AND p.modelo=e.modelo
ORDER BY p.tipo,p.modelo,e.n_almacen;
Indicando que esa operación no es válida en esa vista (al utilizar dos tablas). Esta situación
la puede arreglar un trigger que inserte primero en la tabla de piezas (sólo si no se
encuentra ya insertada esa pieza) y luego inserte en existencias.
Eso lo realiza el trigger de tipo INSTEAD OF, que sustituirá el INSERT original por el
código indicado por el trigger:
Este trigger permite añadir a esa vista añadiendo los campos necesarios en las tablas
relacionadas en la vista. Se podría modificar el trigger para permitir actualizar, eliminar
o borrar datos directamente desde la vista y así cualquier desde cualquier acceso a la base
de datos se utilizaría esa vista como si fuera una tabla más.
(2072
(2072
07)07)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
desactivar un trigger
activar un trigger
(2082
(2082
08)08)
gestión de bases de datos 2o curso de administración de sistemas informáticos en red
(unidad 5) PL/SQL autor: Jorge Sánchez – www.jorgesanchez.net
(2092
(2092
09)09)
bibliografía
Introducción a los Sistemas de Bases de Datos (7ª Edición)
C. J. Date
Prentice Hall, 2001
(211)
gestión de bases de datos
bibliografía
Oracle 9i
Miachel Abbey
Mike Corey
Ian Abramson
Oracle Press, Mac Graw Hill, 2002
(212)
2o curso de administración de sistemas informáticos en red
autor: Jorge Sánchez – www.jorgesanchez.net
(213)
índice de
ilustraciones
Ilustración 1, Ejemplo de fichero de acceso directo........................................................................................... 12
Ilustración 2, ejemplo de fichero secuencial encadenado. Los punteros le recorren por la clave ........ 13
Ilustración 3, ejemplo de fichero secuencial indexado .................................................................................... 14
Ilustración 4, Ejemplo de archivo secuencial indexado y encadenado....................................................... 15
Ilustración 5, Sistemas de Información orientados al proceso ....................................................................... 17
Ilustración 6, Sistemas de información orientados a datos ............................................................................ 18
Ilustración 7, Esquema del funcionamiento y utilidad de un sistema gestor de bases de datos.......... 19
Ilustración 8, Modelo de referencia de las facilidades de usuario ............................................................... 23
Ilustración 9, Esquema del funcionamiento de un SGBD ............................................................................. 24
Ilustración 10, Relación entre los organismos de estandarización ................................................................27
Ilustración 11, Niveles en el modelo ANSI ........................................................................................................... 28
Ilustración 12, Arquitectura ANSI, explicación clásica del funcionamiento............................................... 29
Ilustración 13, Modelos de datos utilizados en el desarrollo de una BD ...................................................... 31
Ilustración 14, Ejemplo de esquema jerárquico ................................................................................................ 33
Ilustración 15, ejemplo de diagrama de estructura de datos Codasyl ....................................................... 33
Ilustración 16, Ejemplos de entidad y conjunto de entidad .......................................................................... 36
Ilustración 17, Representación de la entidad persona .................................................................................... 36
Ilustración 18, Entidad débil ...................................................................................................................................37
Ilustración 19, ejemplo de relación........................................................................................................................37
Ilustración 20, Tipos de relaciones ........................................................................................................................38
Ilustración 21, Cardinalidades. .............................................................................................................................. 39
Ilustración 22, Ejemplo de rol................................................................................................................................ 39
Ilustración 23, Atributos..........................................................................................................................................40
Ilustración 24, Relación ISA. .................................................................................................................................. 42
Ilustración 25, Ejemplo de relación ISA .............................................................................................................. 42
Ilustración 26, Relación de herencia, la clave de la superentidad es clave de las subentidades. ...... 43
Ilustración 27, La clave de la superentidad no es clave de las subentidades. .......................................... 43
Ilustración 28, Relación ISA con obligatoriedad............................................................................................... 44
Ilustración 29, Tipos de relaciones ISA ................................................................................................................ 46
Ilustración 30, Relación candidata a entidad débil........................................................................................ 46
Ilustración 31, Entidad débil relacionada con su entidad fuerte ................................................................. 47
Ilustración 32, Ejemplo de clave secundaria ..................................................................................................... 58
Ilustración 33,Transformación de una entidad fuerte al esquema relacional .........................................60
(215)
sistemas gestores de bases de datos
índice de ilustraciones
(216)