Escolar Documentos
Profissional Documentos
Cultura Documentos
SQL
Jorge Prez R. e Universidad de Talca, II Semestre 2006
SQL + Procedural
La mayor de los DBMS actuales permiten extensiones de SQL a para la creacin de bloques de ejecucin similares a los de un o o lenguaje de programacin de propsito general. o o Sintaxis y Semntica no estndar, depende del DBMS pero son a a muy similares en general. Nosotros estudiaremos en particular a SQLServer (Para Oracle es muy similar).
SQL + Procedural
Los bloques pueden almacenarse en el DBMS en forma compilada para que los clientes de la BD puedan acceder a ellos. Algunas instrucciones generales: declare: declaracin de variables. o set: asginacin de variables. o if. . .else: control de ujo. while: control de ujo. begin. . .end: agrupacin en bloques. o Todas las variables comienzan con @, por ejemplo: @mivariable, y se pueden usar en vez de cualquier valor constante.
SQL + Procedural
declare se usa para declarar variables en un bloque de instrucciones. declare @maximo money Para asignar valores a variables se puede usar set o el resultado de una consulta. set @maximo = 100000 select @maximo = max(salario) from empleado Se pueden usar para evitar las consultas anidadas (subconsultas).
SQL + Procedural
if se usa para decidir el ujo de las instrucciones if @maximo <= 2000000 begin ... end Se puede usar por ejemplo para hacer actualizaciones condicionales. while se usa de forma similar para repetir instrucciones mientras cierta condicin sea verdadera. o while @maximo <= 2000000 begin ... end
Funciones de Usuario
Usando bloques de instrucciones se pueden crear funciones de usuario que pueden usarse en consultas simples. Se usa el comando create function para crearlas y return para el valor de retorno: create function func(@parametro1 tipo1, ...) returns money as begin ... return @valor_retorno end
Funciones ya Construidas
SQLServer al igual que la mayor de los DBMS comerciales, a provee funciones ya construidas. Funciones para manipular fechas: day, month, year, getdate, dateadd,... Funciones matemticas: abs, cos, sin, floor, ceiling,... a Funciones de strings: substring, lower, upper, trim,... Pueden crearse funciones ms complejas que usen estas funciones a para calcular su resultado.
Procedimientos Almacenados
(Stored Procedures) Son procedimientos que se encuentran compilados y almacenados en el DBMS. Pueden realizar operaciones de mantenimiento, actualizacin, o insercin, eliminacin y consulta. o o Pueden recibir parmetros para realizar sus tareas. a Son excelentes para mantener seguridad, encapsulamiento y para aumentar la eciencia de las aplicaciones que funcionan con interaccin con DBMS. o
10
11
Restricciones de Integridad
Hasta ahora los tipos de restricciones de integridad que hemos visto usan un modelo esttico, dependen de valores constantes. a Son controladas cada vez que el elemento asociado cambia (en cualquier forma). Hemos usado: Restricciones de unicidad llaves primarias. Restricciones referenciales llaves forneas. a Restricciones de dominio formatos de strings, rangos de valores, etc. Las restricciones que hemos visto, son impuestas por el diseador n de la BD y ejecutadas por el DBMS.
12
Restricciones Complejas
Si quisiramos restricciones ms complejas como: e a Un empleado que es supervisor de un departamento nunca pueda ganar menos de $500.000. La suma de los salarios de todos los empleados de cierto departamento nunca puede exceder los $10.000.000. En una base de datos de facturas, el monto de una factura siempre debe ser igual a la suma de los temes (productos) asociados a la factura. No pueden expresarse en forma esttica (usando check), de hecho a las restricciones anteriores involucran ms de una tabla de la base a de datos. Necesitamos que el programador de la base de datos pueda crear bloques de ejecucin para implementar estas restricciones. o
13
Reglas de Negocio
Adems de chequear restricciones en un sistema de BD nos podr a a interesar la ejecucin de acciones en forma automtica. o a Muchas veces estas acciones estn vinculadas a reglas de negocio. a Por ejemplo, en una BD de inventario de una empresa, podr a interesarnos que al momento que el stock de un producto bajara de cierto rango, automticamente se generara una nota de pedido a de ese producto. Son similares a las restricciones complejas pero desde un punto de vista de generar una accin ms que de prohibirla. o a Las restricciones complejas pueden ser vistas como un tipo de reglas de negocio.
14
Triggers
El estndar SQL3 dene procedimientos llamados triggers o a disparadores especialmente diseados para este tipo de n restricciones y reglas de negocio. A pesar de que los DBMSs comerciales trabajan a nivel de SQL2, en el aspecto de restricciones complejas se acercan mucho ms a a SQL3. Los triggers son bloques de cdigo SQL + Procedural que o permiten chequear y forzar restricciones complejas de integridad y ejecutar acciones automticas. a Son ejecutados por el DBMS ante ciertos eventos que pueden ser denidos al momento de crear el trigger. Un trigger puede ejecutarse bajo ciertas condiciones, si la condicin de trigger es satisfecha. o
15
Triggers (cont.)
(estndar SQL3) a Un trigger siempre se vincula a un evento sobre una tabla de la base de datos: insercin, actualizacin o eliminacin. o o o Se puede especicar que las acciones del trigger ocurran antes, despus o en vez del evento que lo gatilla. e Dentro del cdigo del trigger el procedimiento puede referirse a o todas las antiguas y nuevas tuplas que fueron insertadas, actualizadas o eliminadas: antiguas antes de la actualizacin o eliminacin o o nuevas despus de la actualizacin o insercin e o o Los eventos de actualizacin se pueden vincular, adems de a una o a tabla, a un atributo de ella.
16
Triggers (cont.)
Si quisiramos hacer un trigger que prevenga el hecho de que un e empleado que es supervisor de un departamento nunca pueda ganar menos de $500.000, podr amos hacer un trigger que: Est vinculado a una actualizacin de la tabla EMPLEADO. e o Para cada una de las tuplas nuevas hacer join con la tabla SUPERVISA y seleccionar los empleados que supervisan a un departamento y tienen salario menor a $500.000. Realizar una de las siguientes acciones: Borrar las tuplas problemticas de la tabla SUPERVISA, a o Actualizar los salarios problemticos a $500.000, a o Deshacer la actualizacin. o
17
Triggers (cont.)
La decisin que se tome dependern del negocio. o a Por qu no es necesario hacer un trigger para la insercin de e o tuplas en EMPLEADO? De hecho, slo nos importa las actualizaciones a ciertos atributos o de la tabla EMPLEADO. Mucho cuidado!!!: Para completar la restriccin tambin se o e debiese hacer un trigger de insercin en la tabla SUPERVISA!!! o
18
Triggers en SQLServer
SQLServer soporta triggers de una manera cercana al estndar a SQL3. Algunas restricciones: soporta slo triggers despus o en vez o e de. Para crear un trigger se usa create trigger. Para especicar el momento de ejecucin se usa after (despus o e de) o instead of (en vez de).
19
20
21
22
23
24
25
Se insertan las tuplas que resultan de una consulta. El error fue suponer que inserted ten slo una tupla. a o Los triggers para actualizacin y eliminacin son similares. o o
26
Cursores
Un cursor es un puntero a una tupla en el resultado de una consulta. El cursor puede ir avanzando por las tuplas a medida que se necesita. Inicialmente el cursor se encuentra en la primera tupla de la consulta y puede avanzar hasta despus de la ultima tupla. e Los cursores son la forma ms verstil de acceder a los datos de a a una consulta. Por ejemplo, en un trigger podr amos con un cursor recorrer una a una las tuplas en las tablas inserted y deleted, y tomar decisiones particulares para cada tupla.
27
Cursores en SQLServer
Un cursor es un tipo especial de datos. Para crear un cursor se usa declare mi_cursor cursor for <consulta> Lo anterior declara un cursor de nombre mi_cursor que puede avanzar por las tuplas resultado de <consulta>. Para hacer avanzar al cursor se usa fetch: fetch next from mi_cursor into <lista de variables> Lo anterior almacena los datos de la tupla actual del cursor en la lista de variables y luego hace avanzar al cursor.
28
29
30