Professional Documents
Culture Documents
MORENO
FACULTAD DE CIENCIAS DE LA COMPUTACION
Carrera de Ingeniera Informtica
TEMA 5
Procedimientos almacenados
Los SGDB permiten almacenar en la BD programas que incluyen
sentencias SQL y de control de flujo (Transac-SQL), a estos
programas los denomina Procedimientos Almacenados (PA).
Cada Base de Datos almacena
sus propios PA
PA
Function String GetNombre(xcode int)
return xnomb
Procedimientos almacenados
La posibilidad de escribir PA mejora notablemente la
potencia, eficacia y flexibilidad de SQL. Los
procedimientos compilados mejoran la ejecucin de
las instrucciones y lotes de SQL de forma dramtica.
Los PA se diferencian de las instrucciones SQL en
que estn pre-compilados. La primera vez que se ejecuta
un procedimiento, el procesador de consultas del SGBD
lo analiza y prepara un Plan de Ejecucin que se
almacena de forma definitiva en una tabla del sistema.
Posteriormente, el PA se ejecuta segn el Plan
Almacenado, lo que implica, que el PA se ejecute casi
de forma instantnea.
Procedimientos almacenados
Para que existen?
Para que usarlos, si puedo tener mis consultas bien
bonitas metida en mi cdigo (como consultas SQL Adhoc)?
El uso ms tpico de los PA es proveer una validacin
integrada en la base de datos, as como proveer
mecanismos de control de acceso a la misma.
Los PA son usados para consolidar y centralizar
lgica que originalmente se implementaba en las
aplicaciones.
Beneficios
Beneficios de los procedimientos almacenados:
Simplifican la ejecucin de tareas repetitivas
Corren ms rpido que las mismas instrucciones
ejecutadas en forma interactiva
Reducen el trfico a travs de la red
Pueden capturar errores antes que ellos puedan entrar a
la base de datos
Establece consistencia porque ejecuta las tareas de la
misma forma
Permite el desarrollo modular de aplicaciones
Ayuda a proveer seguridad
Puede forzar reglas y defaults complejos de los negocios
Triggers
Procedimientos extendidos
Ejemplo
[exec | execute]
nombre_procedure
Ejemplo:
Ejemplo:
Ejemplo:
Paso de parmetros
Sintaxis para paso por nombre:
Ejemplo:
Retorno de valores
El retorno de valores es una variable de un
procedimiento almacenado que puede enviar
un valor a la instruccion exec procedure.
Uso de cursores en PA
Un cursor es una herramienta de SQL Server que
nos permite recorrer el resultado de una consulta
SQL y realizar operaciones con estos resultados
dentro de un bucle de datos.
Declaracin
El primer paso constar de la declaracin del cursor,
donde se indicarn (junto con el nombre del cursor)
la consulta que el mismo representar y algunas
otras caractersticas.
Un ejemplo de declaracin de cursor es el siguiente:
DECLARE CurProv FOR SELECT nomb FROM prov
Uso de cursores en PA
Apertura
La apertura del cursor ejecutar la consulta definida en el
paso previo y cargar los datos en el mismo. La funcin
OPEN de T-SQL permitir efectuar esta terea, para
continuar con el ejemplo previo la forma de abrir el cursor
ser la siguiente:
OPEN CurProv
Recorrido del cursor y acceso a los datos
Este paso constar de recorrer los resultados del cursor, la
instruccin FETCH permitir efectuar dicha operacin. Las
filas ledas podrn copiarse a variables utilizando la
sentencia INTO en combinacin con la sentencia FETCH,
por ejemplo la sentencia:
Uso de cursores en PA
Cierre del cursor
En el cierre del cursor se liberarn los registros tomados
por el mismo. Una vez que el cursor es cerrado ya no podr
recorrerse el conjunto de resultados hasta que el mismo
sea reabierto, la sentencia CLOSE cerrar un cursor abierto
y la sintaxis puede verse a continuacin:
CLOSE CurProv
Desalojo del cursor
Este paso eliminar la referencia al cursor definido
previamente, por lo que ya no ser posible realizar una
reapertura del mismo, en este caso la sintaxis ser:
DEALLOCATE CurProv
Uso de cursores en PA
Ejemplo de cursor
A continuacin juntaremos todos los pasos descriptos
previamente y crearemos el ejemplo ms simple de un
cursor el cual recorrer la tabla Proveedores de la base de
datos Demo y mostrar por pantalla el nombre luego que
el mismo ha sido copiado a la variable @nomb
Uso de cursores en PA
Ejemplo de cursor
PA para calcular el Precio Promedio Ponderado (PPP) de un Producto en la
tabla sumi. Recibe como parmetro de entrada el Cdigo del Producto y
devuelve el PPP. Se utiliza un cursor el cual recorrer la tabla sumi de la
base de datos Demo y sumar por cada fila las variables correspondiente, y
al final se hace el caculo del PPP almacenado en la variable @ppp.
Su ejecucion es
grant execute
on procedure_name
to user_list
Ejemplo:
grant execute
on proc_update_precio
to jovana, pablo, julio
Triggers
(Disparadores)
Definicin de Trigger
Un Trigger es un procedimiento almacenado asociado
con una tabla, el cual se ejecuta automticamente
cuando se modifica un dato de esa tabla
Un trigger se puede definir para: insert, update, o
delete o cualquier combinacin de ellos
PA vs TRIGGER
Activacin de un Trigger
Cuando se modifica un dato en una tabla
que tiene declarado un Trigger para esa
sentencia, el Trigger se dispara
El trigger se dispara una vez,
independientemente del nmero de filas
afectadas
El trigger se dispara aunque no hayan filas
Insert
afectadas
Modifica
Delete
Update
Llamarse directamente
Usar parmetros
Definirse sobre tablas temporales o vistas
Crear objetos permanentes de base de datos
Sintaxis simplificada:
drop trigger nombre_trigger
Borrados
La instruccion delete adiciona filas a la
tabla deleted
Inserciones
La instrucin insert adiciona filas a la
tabla inserted
Actualizaciones
La instruccin update adiciona filas en
ambas tablas
Prctica de Laboratorio
Triggers - ejemplo
Crear dos tablas:
Triggers - ejemplo
Crear un trigger que despus de insertar en dsumi
actualice en la tabla hsumi.
Triggers - ejemplo
Crear un trigger que despus de eliminar de la tabla
dsumi actualice en la tabla hsumi.