Los procedimientos almacenados
(stored procedures) son una serie de
colecciones de sentencias Transat-SQL que se encuentran precompiladas y
optimizadas para que su ejecución sea mucho más rápida que el conjunto de
sentencias individuales que los integran. Un tipo especial de procedimiento
almacenado es el trigger. Consiste en
un, desencadenador o disparador, lo que hace referencia a la particularidad de estos
procedimientos almacenados de ejecutarse de manera automática disparados cuando
se produce una cierta condición o situación especial en los datos que componen
la base de datos.
Los triggers son muy útiles
para definir modificaciones y acciones automáticas que respondan a la evolución
de los datos. Los procedimientos almacenados y los triggers permiten mejorar el
rendimiento de las bases de datos, al tiempo que automatizan el proceso de
actualización de los datos tomando las decisiones adecuadas a los procesos de
negocio.
Procedimientos Almacenados
Un procedimiento almacenado no
es más que una colección de sentencias de SQL que se construyen como una función
de un lenguaje estructurado. Es decir, se llaman a través de un identificador,
es posible definir variables dentro de ellos, pueden recibir argumentos y devolver un valor
de retorno.
La característica principal de
los procedimientos almacenados es que se optimizan en el momento de su
creación. A diferencia de lo que pasa con las sentencias SQL que se envían el
gestor de forma interactiva, los procedimientos almacenados pasan previamente
un proceso de normalización.
Compilación de procedimientos almacenados
SQL Server mejora el
rendimiento de las consultas utilizando procedimientos almacenados en un doble
proceso: normalización y compilación. Cuando se crea un procedimiento
almacenado el procesador de consultas del gestor crea una versión del mismo con
una estructura normalizada, y la almacena en una de las tablas de sistema. Las
siguientes ejecuciones del procedimiento no necesitarán consumir tiempo para
llevar a cabo este proceso de normalización de nuevo, por lo que su ejecución
será más rápida.
Por otro lado, cuando el
procedimiento se ejecuta por primera vez, se compila y la optimiza el acceso
del procedimiento a los datos. Este proceso optimizado y compilado, se llama plan
y se mantiene en la memoria caché de procedimientos, para posteriores
ejecuciones con un gran ahorro de tiempo y recursos.
Características básicas
Las principales
características que distinguen a los procedimientos almacenados de las
sentencias SQL son:
De forma análoga a las
funciones de lenguajes estructurados, aceptan parámetros.
Devuelven un valor de retorno.
Este valor sirve como indicador de si las cosas han funcionado de forma
correcta o se ha producido algún fallo. También puede devolver un valor como un
resultado.
Los procedimientos almacenados
pueden estar anidados, es decir, es posible que un procedimiento almacenado
llame en su interior a otro En los procedimientos anidados puede hacerse
referencia a todos los objetos excepto a las tablas temporales que eventualmente
hayan podido crearse en el primero.
Aspectos de seguridad. Se
puede autorizar a un usuario para ejecutar procedimientos almacenados aunque no
tenga permiso de acceso directo a las tablas de la base de datos con la que
trabaja el procedimiento. Esto permite un mayor control sobre las acciones.
Tipos de procedimientos almacenados
Los procedimientos almacenados
pueden ser:
Permanentes. Es posible utilizarlos en
todas las sesiones de SQL Server para un determinado usuario, si tiene permisos
para acceder a él.
Temporales. Sólo se puede acceder a ellos
en la sesión actual de trabajo.
Qué es un trigger
Un trigger es un tipo especial
de procedimiento almacenado que se ejecuta automáticamente como respuesta a
ciertas modificaciones de los datos, las condiciones de disparo se especifican
en el momento de la creación del trigger. La utilidad de los triggers es variada.
La más ampliamente utilizada es la de establecer reglas de integridad
referencia! entre los datos de las tablas de la base de datos.
Triggers y DRI.
DRI significa sentencias de
declaración de integridad referencial (Declarative Referential Integity, DRI).
Los triggers suelen emplearse para manejar las situaciones cuando estas
sentencias DRI no son aplicables. Cuando se declara una sentencia DRI para una
determinada situación, no se ejecuta ningún trigger asociado, dado que su
ejecución no es necesaria. Las condiciones de integridad referencia que
representan las DRI son especificadas en el momento de la creación de las
tablas y pueden manejar un buen número de situaciones. Pero su utilización no permite resolver ciertos
planteamientos de los análisis de datos
y, sobre todo, poseen la limitación fundamental de que no permiten hacer
referencia a los datos de otras bases de datos para validar los de la nuestra. Esta
posibilidad resulta especialmente útil cuando trabajamos en entornos con
aplicaciones distribuidas entre múltiples bases de datos o servidores.
Acciones que disparan la ejecución de un trigger
Las acciones que ponen en
marcha la ejecución de un trigger son aquellas que pueden llevarse a cabo en los datos, tanto la
adición de datos nuevos como la eliminación de datos existentes. Estas modificaciones
se llevan a cabo a través de la
ejecución de las sentencias UPDATE, DELETE o INSERT.
Por ejemplo: Queremos que cada
vez que se inserta una fila en una tabla se realice un chequeo que determine si
los datos introducidos son correctos, o que al eliminar datos se eliminen o
modifiquen los datos correspondientes de otras tablas relacionadas.
Para estos aspectos los
triggers son una herramienta poderosa y, sobre todo, automática. Es posible
definir un trigger que realice las tareas descritas y que se ponga en ejecución
inmediatamente después a la operación de borrado o inserción. Cuando dicha acción
de modificación se completa, se dispara el trigger correspondiente. Es posible
definir triggers que respondan a una o varias de estas acciones. Los triggers también
pueden ser recursivos, pues unos pueden dispararse a otros, o incluso a ellos mismos.
Utilidad de los triggers
Son muy útiles para
centralizar en una base de datos la toma de las decisiones de negocio que se
asocien a los datos de la misma. De esta forma se descarga en gran medida a las
aplicaciones cliente de la tarea de revisar las acciones de actualización de
datos. Con el consiguiente ahorro de tiempo y recursos así como se evita que la
aplicación externa toque demasiado en la base de datos pudiendo dejarla
inconsistente. Además queda todo centralizado en la propia base de datos.
Por ejemplo. Supongamos que
tenemos dos tablas una de Almacén y
otra de Ventas, de forma que cada vez que se produce una nueva venta se
actualicen las unidades que aún quedan en el almacén. La solución consiste en dejar
que sea la propia base de datos la que se encargue de realizar las
actualizaciones de manera automática a través de un trigger. De este modo, los
triggers pueden utilizarse para resolver, entre otras, las siguientes
situaciones:
Preservar la
integridad referencial. En el caso en que dos o más tablas en una base
de datos se hallen ligadas por claves ajenas no será posible modificar datos en
la tabla primaria sin modificar aquellos que se hallen vinculados a él en la
tabla subordinada. Utilizando triggers es posible forzar a que los registros dependientes
sean eliminados cuando llevamos a cabo un DELETE en la tabla principal. También
es necesario en este ámbito deshacer todas las inserciones de datos en la tabla
subordinada cuya clave ajena no tenga correspondencia en la clave primaria de
la tabla principal.
Establecimiento
de condiciones complejas. Los triggers Permiten, especificar
condiciones para que los datos de una o varias columnas sean considerados
válidos.
Respuesta a
cambios de estado de la tabla. Los triggers
permiten examinar el estado de la tabla antes y después de realizar una tarea
de modificación y actuar conforme a ella.
No hay comentarios:
Publicar un comentario