Está en la página 1de 44

UNIVERSIDAD AUTONOMA GABRIEL RENE

MORENO
FACULTAD DE CIENCIAS DE LA COMPUTACION
Carrera de Ingeniera Informtica

TEMA 5

Procedimientos Almacenados y Trigger

Elaborado por: ING. Ubaldo Prez


Ferreira.

Santa Cruz de la Sierra Bolivia

Procedimientos almacenados (PA)


Muchas aplicaciones tienen incluida en sus "clase",
funciones que hacen referencia a cdigo con sentencias
SQL, tal como se muestra en el siguiente ejemplo:
Es decir, que los programadores en los lenguajes
convencionales (Java, C#, etc) desarrollan las
transacciones que actualizan la Base de Datos, por lo
tanto, deben conocer a detalle el diseo de la BD.

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)

Select xnomb=nomb from prov


where cprv=xcprv

return xnomb

Por lo tanto, toda la logica de instrucciones que


estn embebidas en los lenguajes
convencionales, pueden almacenarse en la BD
y ser invocada desde cualquier lenguaje
convencional.
Excecute Proc GetNombre(xcode int)

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

Tipos de procedimientos almacenados


Procedimientos almacenados definidos por el usuario
Son procedimientos definidos por el usuario que se
deben llamar explcitamente

Triggers

Son procedimientos definidos por el usuario que se


ejecutan automticamente cuando se modifica un dato
en una tabla

Procedimientos del sistema

Procedimientos suministrados por el sistema

Procedimientos extendidos

Procedimientos que hacen llamadas al sistema operativo


y ejecutan tareas a ese nivel

Procedimientos almacenados en SQL Server


En el SQL Server los PAs estan almacenados en area
de Programacin/Procedimiento Almacenado

Como Crear y Eliminar un PA en SQL Server


Sintaxis para crear:

create proc nombre_procedure


as
intrucciones
return

Sintaxis para eleiminar:


drop proc nombre_procedure

Ejemplo

Como Ejecutar un PA en SQL Server


Sintaxis para ejecutar:

[exec | execute]
nombre_procedure
Ejemplo:

Uso de variables en los PA


Los procedimientos almacenados pueden crear y
usar variables locales
Las variables slo existen mientras exista el
procedimiento
Las variables no las puede usar otro proceso

Ejemplo:

Uso de parmetros de entrada en PA


Un parmetro de entrada es una variable
local para un PA, que puede recibir un
valor desde la instruccion exec
procedure.

Definir parmetros de entrada


Sintaxis simplificada:

create procedure nombre_procedure


(parametros tipo dato default_valor
[, parametros tipo dato default_valor...] )
as
instrucciones
return

Ejemplo:

Paso de parmetros
Sintaxis para paso por nombre:

[exec | execute] procedure procedure_name


parameter_name = value [, parameter_name = value ]

Ejemplo:

Los nombres de los parmetros en la sentencia exec


deben concordar con los nombres de los
parmetros usados en la sentencia create
procedure
Los parmetros pueden pasar en cualquier orden

Valores por default


Se puede asignar un valor por default a un parmetro
cuando l no se indica en la sentencia exec
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.

Crear parmetros que retornan valores


Sintaxis:
create procedure nombre_procedure
(nombre_parametro datatype output
[, nombre_parametro datatype output...] )
as
instruccion
return
Ejemplo:

Los valores que retornan los parmetros se pasan automticamente al conjunto


respuestas.
El retorno de valores se pueden pasar por nombre o por posicin
Se recomienda el paso por nombre

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:

FETCH NEXT FROM CurProv INTO @nomb

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

Gestin de Permisos para los PA


Para permitir que otros usen un procedimiento
almacenado, el propietario debe dar los respectivos
permisos
Sintaxis simplificada:

grant execute
on procedure_name
to user_list

Ejemplo:
grant execute
on proc_update_precio
to jovana, pablo, julio

Modificar un PA en SQL Server

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

update hsumi set itot=


update hsumi set itot=
update hsumi set itot=

update hsumi set itot=


update hsumi set itot=
update hsumi set itot=

PA vs TRIGGER

La diferencia con los PA del sistema es que los


triggers:
- No pueden ser invocados directamente; al
intentar modificar los datos de una tabla para la
que se ha definido un disparador, el disparador se
ejecuta automticamente.
- No reciben y retornan parmetros.
- Son apropiados para mantener la integridad de
los datos, no para obtener resultados de
consultas.

RESTRICCIONES (Check) vs TRIGGER

Las restricciones se comprueban ANTES


de la ejecucin de una instruccin
"insert", "update" o "delete".
Las restricciones se comprueban primero,
si se infringe alguna restriccin, el
desencadenador no llega a ejecutarse.

Los triggers se ejecutan DESPUES de la


ejecucin de una instruccin "insert",
"update" o "delete" en la tabla en la que
fueron definidos.
Los triggers puden hacer referencia a los
atributos de otras tablas.

RESTRICCIONES (Check) vs TRIGGER


Ventajas de las restricciones:
Las restricciones (y reglas) son ms rpidas que los
triggers
Las restricciones no requieren codificacin adicional
Es mejor para chequear datos antes de ingresarlos a la
base de datos

Ventajas de los triggers:


Muy flexible
Los triggers pueden hacer cualquier cosa que se pueda
codificar

Mejor para las reglas complejas del negocio que no se


pueden expresar como restricciones referenciales tales
como actualizaciones o borrados en cascada

Aplicaciones Tpicas de Triggers


Hacer modificaciones en cascada sobre tablas
relacionadas
Deshacer cambios que violan la integridad de los
datos
Forzar restricciones que son muy complejas para
reglas y restricciones
Mantener datos duplicados
Mantener columnas con datos derivados
Hacer ajustes de registros

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

Reglas para Triggers


Los Triggers pueden:
Declarar variables locales
Invocar procedimientos almacenados

Los Triggers no pueden:

Llamarse directamente
Usar parmetros
Definirse sobre tablas temporales o vistas
Crear objetos permanentes de base de datos

Las operaciones con registro mnimo (como select


into) no disparan los triggers

Crear y Borrar Triggers


Sintaxis :

create trigger nombre_trigger


on nombre_tabla
for {insert | update | delete} [, {insert |
update | delete} ...]
as
instrucciones

Sintaxis simplificada:
drop trigger nombre_trigger

Las tablas inserted y deleted


inserted y deleted son dos tablas que se crean
automticamente cada vez que se dispara un trigger
inserted almacena cualquier fila que se vaya a aadir a la tabla
deleted almacena cualquier fila que se vaya a borrar de la tabla

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

Reglas para las tablas inserted y deleted


Ambas tablas tienen las mismas columnas que la
tabla asociada al trigger
El trigger puede consultar datos de las dos tablas
Otros procesos no pueden consultar datos de las dos
tablas

El trigger no puede modificar datos en las dos


tablas
Cada anidamiento de triggers tiene sus propias
tablas inserted y deleted
Si un trigger modifica datos de su tabla asociada, esos
cambios no se reflejan en las tablas inserted and
deleted de ese trigger

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.

Uso de la tabla deleted y inserted - ejemplo

Uso de la tabla deleted y inserted - ejemplo

Uso de la tabla deleted y inserted - ejemplo