134
Laboratorio de Bases de Datos Laboratorio de Bases de Datos Unidad V Departamento de Electricidad, Electrónica y Computación Facultad de Ciencias Exactas y Tecnología Universidad Nacional de Tucumán Primer Semestre 2018

Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

  • Upload
    doque

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

Laboratorio de Bases de DatosLaboratorio de Bases de Datos

Unidad V

Departamento de Electricidad, Electrónica y ComputaciónFacultad de Ciencias Exactas y Tecnología

Universidad Nacional de Tucumán

Primer Semestre 2018

Page 2: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

2Lab. Bases de Datos (EBB) | Unidad V - 2018

Introducción [1 | 4]

Procedimientos almacenadosDefiniciónCreaciónRecomendacionesModificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 3: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

3Lab. Bases de Datos (EBB) | Unidad V - 2018

Introducción [2 | 4]

ParametrizaciónParámetros de entradaParámetros de salidaMensajes de errorManejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 4: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

4Lab. Bases de Datos (EBB) | Unidad V - 2018

Introducción [3 | 4]

TriggersDefiniciónAdministraciónAnidamiento y recursividadEjemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 5: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

5Lab. Bases de Datos (EBB) | Unidad V - 2018

Introducción [4 | 4]

Triggers DDLDefiniciónCreaciónAdministración

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 6: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

6Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [1 | 23]

Procedimiento Almacenado (Stored Procedure):Colección de sentencias SQL, con un nombre, almacenadas en el servidor dentro de la BD

Finalidad: Encapsular tareas repetitivas

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 7: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

7Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [2 | 23]

Características:Soportan declaración de variables, ejecución condicional y otras características de programación

Aceptan parámetros de entrada y devuelven valores

Devuelven un valor de estado que indica éxito o falla

Pueden llamar a otros procedimientos almacenados

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 8: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

8Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [3 | 23]

Tipos:Del sistemaLocalesTemporalesRemotosExtendidos

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 9: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

9Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [4 | 23]

Procedimientos almacenados del sistema:Devuelven información de objetos del sistema y ejecutan tareas de mantenimiento

MySQL no tiene estos tipos de procedimientos

En SQL Server se almacenan en la BD master y sus nombres comienzan con sp_:

sp_help

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 10: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

10Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [5 | 23]

Procedimientos almacenados locales:Creados en las BD de usuario

Procedimientos almacenados temporales:En SQL Server sus nombres empiezan con # o ## (si son locales o globales)

No son soportados por MySQL

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Los procedimientos almacenados temporales se crean siempre en la BD tempdb.

Page 11: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

11Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [6 | 23]

Procedimientos almacenados remotos:Soportan la funcionalidad de consultas y operaciones distribuidas

Procedimientos almacenados extendidos: Se ejecutan fuera del ambiente del servidorNo son soportados por MySQLEn SQL Server, sus nombres comienzan con xp_

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Los procedimientos almacenados extendidos son funciones dentro de una DLL que incrementan la funcionalidad de SQL Server.

●Ejemplo:

EXEC master..xp_cmdshell 'dir c:\'

Page 12: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

12Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [7 | 23]

Características:Encapsulan la lógica de negocio y crean una lógica de la aplicación reusable

Ocultan a los usuarios la complejidad subyacente y detalles internos de la BD

Proveen mecanismos de seguridad

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Las reglas o políticas de negocio encapsuladas en los procedimientos se pueden modificar en un único lugar. Todos los clientes pueden usar los mismos procedimientos almacenados asegurándose un acceso consistente a los datos.

●Si todas las funciones de negocio se soportan mediante un conjunto de procedimientos almacenados, los usuarios no deben acceder a las tablas/vistas directamente.

●Se puede asignar permisos a los usuarios para ejecutar los procedimientos almacenados, aún cuando no tengan permisos para acceder a las tablas o vistas a que hacen referencia los mismos.

Page 13: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

13Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [8 | 23]

Características (continuación):Reducen el tráfico en la red

Reducen la vulnerabilidad debido a los ataques de SQL injection

Se pueden usar para mantener la integridad de datos y reforzar políticas de la BD

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En vez de enviar varias de sentencias SQL por la red, se envía una única sentencia (el llamado al procedimiento) y se recibe su respuesta.

●Mediante el uso de parámetros en el código SQL se reduce la posibilidad que se puedan embeber sentencias SQL en los valores de los parámetros.

Page 14: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

14Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [9 | 23]

Características (continuación):Si se modifican no se necesita hacer un despliegue

Facilitan los cambios en entornos variados

Resulta difícil depurarlos (debugging)

Resulta difícil su refactoreo (renombrado o cambio de ubicación)

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En entornos variados (web, escritorio, herramientas de reportes distribuidas en diferentes sistemas operativos, etc), hacer ciertos cambios en las reglas de negocio resulta más facil con procedimientos almacenados.

Page 15: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

15Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [10 | 23]

Características (continuación):Hacerles pruebas unitarias requiere de código externo a la BD

Resulta difícil hacerles control de versiones

No mejoran el rendimiento (ver plan de ejecución)

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Control de versiones: ¿cuán fácil resulta volver a la versión 1 (de hace un año) desde la versión 2 (la actual)?. Una posible solución consiste en versionar los nombres de los procedimientos, quedando la base de datos con una mezcla de procedimientos viejos y nuevos.

Page 16: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

16Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [11 | 23]

Plan de ejecución: Es el resultado del cálculo realizado por el optimizador de consultas para determinar el modo más eficiente de implementar una consulta

2 planes: Real: muestra cómo se ejecutó una consulta

Estimado: muestra cómo se ejecutaría una consulta

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Para una determinada consulta, se puede ver el plan de ejecución real que se ejecutó, o la forma en que el SGBDR ejecutará la consulta (plan estimado).

●Estos planes pueden diferir ya que por ejemplo, las estadísticas pueden estar desactualizadas (ver más adelante).

Page 17: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

17Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [12 | 23]

Procesos que se realizan cuando se ejecuta una consulta:

Análisis sintáctico (parsing)

Normalización

Compilación

Optimización

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Cuando se ejecuta una consulta, el servidor realiza una serie de procesos con la finalidad de brindar la información solicitada, o guardarla, de la forma más rápida posible, conservando la integridad de datos.

Page 18: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

18Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [13 | 23]

Análisis sintáctico (parsing): Controla que la consulta esté bien escrita (bien formada)

No se controlan los nombres de los objetos o columnas

La salida de este proceso se llama “árbol de consulta”

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 19: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

19Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [14 | 23]

Normalización: Verifica los nombres de objetos y columnas, los tipos de datos, la presencia de funciones de agrupamiento, el uso de alias o sinónimos que se deban resolver, etc

La salida de este proceso es la entrada del proceso de compilación

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 20: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

20Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [15 | 23]

Compilación: Construye planes de ejecución teniendo en cuenta la salida del proceso anterior

La salida de este proceso es la entrada del proceso de optimización

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 21: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

21Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [16 | 23]

Optimización: Evalúa los distintos planes de ejecución y elige el de menor costo (el plan que considere que ejecutará la consulta más rápidamente usando la menor cantidad de recursos)

Para la elección del plan tiene en cuenta las estadísticas, los operadores en la cláusula WHERE, el uso de JOIN, UNION, GROUP BY y ORDER BY

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Las estadísticas se obtienen de columnas e índices dentro de la BD, y describen la distribución de los datos y el grado de unicidad de los mismos. Por defecto, las estadísticas se crean y actualizan automáticamente para todos los índices y para cualquier columna que aparezca en un WHERE o JOIN.

●Si las sentencias fueran DDL (Data Definition Language), no habría una forma mejor que otra para crear una tabla por ejemplo, por lo que habría un único plan de ejecución.

Page 22: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

22Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [17 | 23]

Optimización: Para determinar el mejor plan, el optimizador utiliza las estadísticas y recorre los distintos planes, prueba distintos tipos de JOINs, modifica el orden de los JOINs, prueba distintos índices, etc

A cada paso de un plan le asigna un número, que representa el tiempo estimado para ejecutarlo. La suma de estos tiempos es el tiempo estimado (costo) de un plan

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●A veces el optimizador selecciona un plan no muy eficiente si considera que le tomará más tiempo evaluar muchos planes.

●Si se tiene una consulta simple, por ejemplo una única tabla sin índices ni funciones de agrupamiento, en lugar de consumir tiempo intentando calcular el plan más óptimo, el optimizador puede utilizar un plan simple

Page 23: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

23Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [18 | 23]

Optimización: Una vez elegido el plan de ejecución, el mismo se guarda en el cache de procedimientos

Con el plan de ejecución elegido y guardado en el cache de procedimientos, se ejecuta la consulta (según el plan)

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 24: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

24Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [19 | 23]

Primera ejecución de un procedimiento: Se arma su plan de ejecución y se lo guarda en el cache de procedimientos

Siguientes ejecuciones: Reutilizan el plan de ejecución que ya está en memoria (evitan tener que volver a crearlo)

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●El cache de procedimientos es un área de memoria que guarda temporalmente los planes de ejecución compilados. Está formado por una serie de páginas que contienen los planes de ejecución y cuyo tamaño fluctúa dinámicamente de acuerdo a los niveles de actividad.

Page 25: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

25Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [20 | 23]

Permanencia de un plan de ejecución en memoria:Depende del tiempo requerido para su recompilación (costo).

Depende de su frecuencia de uso (edad)

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 26: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

26Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [21 | 23]

Los procedimientos almacenados no optimizan las consultas:

En algunos motores, como SQL Server 2000 y 7.0, un procedimiento almacenado se compila durante su ejecución como cualquier otra sentencia T-SQL

SQL Server 2000 y 7.0 mantienen los planes de ejecución para todas las sentencias SQL en el cache, no solo para los procedimientos almacenados

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Más información:● https://stackoverflow.com/questions/226859/disad

vantage-of-stored-procedures● http://www.spoiledtechie.com/post/Whats-up-

with-Stored-Procedures-these-days.aspx● https://www.seguetech.com/advantages-and-

drawbacks-of-using-stored-procedures-for-processing-data/

● https://stackoverflow.com/questions/15142/what-are-the-pros-and-cons-to-keeping-sql-in-stored-procs-versus-code

Page 27: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

27Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [22 | 23]

En SQL Server, para ver los planes de ejecución, además de la interfaz gráfica, se puede usar:

SET SHOWPLAN_XML ON: plan de ejecución estimado en formato XMLSET SHOWPLAN_TEXT ON: plan de ejecución estimado en formato textoSET STATISTICS XML ON: plan de ejecución real en formato XMLSET STATISTICS PROFILE ON: plan de ejecución real en formato texto

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 28: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

28Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [23 | 23]

En MySQL, para ver los planes de ejecución, además de la interfaz gráfica, se puede usar:

EXPLAIN + Consulta: plan de ejecución real

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 29: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

29Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [1 | 8]

Consideraciones:Se emplea la sentencia CREATE PROCEDURE

Pueden referenciar tablas, vistas, otros procedimientos y tablas temporales

En SQL Server la sentencia CREATE PROCEDURE debe ser la única sentencia en el batch, por lo que no se puede combinar con otra sentencia T-SQL

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En el caso de SQL server, también se puede crear un procedimiento desde SSMS. En MySQL también se lo puede hacer desde algún entorno gráfico (Workbench por ejemplo).

●Si un procedimiento crea una tabla temporal local, ésta deja de existir cuando termina la ejecución del procedimiento.

Page 30: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

30Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [2 | 8]

SQL Server:

CREATE PROCEDURE asp_listado

AS

SELECT P.IdPersona, Apellidos, Nombres, Domicilio, Email, Tipo, Numero

FROM Personas P JOIN Telefonos T ON P.IdPersona = T.IdPersona

ORDER BY 2, 3GO

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Proyecto AgendaMySQLSQLServer: script AgendaSQLServer.sql

●En el caso de SQL server, se puede emplear la sentencia CREATE PROCEDURE o su forma abreviada CREATE PROC.

●Los nombres de los procedimientos se guardan en la tabla de sistema sysobjects y los códigos en la tabla syscomments.

Page 31: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

31Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [3 | 8]

MySQL:DELIMITER //

CREATE PROCEDURE `asp_listado`()

BEGIN SELECT P.IDPersona, Apellidos, Nombres,

Domicilio, Email, Tipo, Numero

FROM Personas P INNER JOIN Telefonos T

ON (P.IDPersona = T.IDPersona) ORDER BY 2, 3;

END //DELIMITER ;

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Proyecto AgendaMySQLSQLServer: script AgendaMySQL.sql

●En el caso de MySQL la primer sentencia DELIMITER cambia el delimitador por defecto (;) a // ya que se quiere pasar el procedimiento almacenado al servidor como un todo, en lugar de dejar que la herramienta interprete cada sentencia por vez. El segundo DELIMITER restituye el delimitador por defecto.

Page 32: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

32Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [4 | 8]

Ejecución en SQL Server: se emplea la sentencia EXECUTE seguida del nombre del procedimiento y sus parámetros:

EXECUTE dbo.asp_listado

Ejecución en MySQL: se emplea la sentencia CALL seguida del nombre del procedimiento y sus parámetros:

CALL asp_listado();

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En SQL Server se puede usar la forma abreviada de EXECUTE: EXEC.

●En MySQL si el procedimiento no lleva parámetros, también se lo puede llamar sin los mismos.

Page 33: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

33Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [5 | 8]

En SQL Server también se pueden ejecutar los procedimientos como parte de una sentencia INSERT, la cual puede poblar una tabla con el resultado devuelto por un procedimiento:

INSERT INTO <tabla> EXEC <procedimiento>

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Para que funcione el ejemplo, la tabla debe existir y los tipos de datos y columnas deben coincidir con lo devuelto por el procedimiento.

Page 34: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

34Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [6 | 8]

Los procedimientos pueden anidarse (un procedimiento llama a otro):

El nivel de anidamiento es limitado

Si Proc1 llama a Proc2, Proc2 puede acceder a todos los objetos definidos localmente en Proc1

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En SQL Server puede haber hasta 32 niveles de anidamiento, y la variable @@nestlevel guarda el nivel de anidamiento actual.

Page 35: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

35Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [7 | 8]

En SQL Server:Para ver información sobre los procedimientos:

sp_help, sp_helptext y sp_depends

Para obtener una lista de procedimientos:

sp_stored_procedures

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 36: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

36Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [8 | 8]

En MySQL:Para ver información sobre un procedimiento:

SHOW CREATE PROCEDURE nombre;

Para obtener una lista de procedimientos:

SHOW PROCEDURE STATUS;

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 37: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

37Lab. Bases de Datos (EBB) | Unidad V - 2018

Recomendaciones [1 | 2]

Cualificar los nombres de los objetos dentro del cuerpo del procedimiento

En SQL Server, tratar de evitar romper la cadena de permisos

Realizar un procedimiento por cada tarea (cohesión)

Crear, probar y corregir los procedimientos en el servidor, luego hacer la prueba en los clientes

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Para evitar romper la cadena de permisos, se recomienda que el usuario dbo sea el dueño de los procedimientos (similar a las vistas).

Page 38: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

38Lab. Bases de Datos (EBB) | Unidad V - 2018

Recomendaciones [2 | 2]

En SQL Server, evitar el uso del prefijo sp_ para los procedimientos

Usar las mismas configuraciones de conexión para todos los procedimientos

Minimizar el uso de procedimientos temporales

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●SQL Server guarda las configuraciones de las opciones SET QUOTED_IDENTIFIER (cuando está activa, los nombres de objetos se pueden delimitar por comillas dobles, por lo que se puede usar un nombre reservado del lenguaje, y cuando está inactiva éstos deben seguir las reglas de T-SQL) y SET ANSI_NULLS (especifica el comportamiento del operador = y <> cuando se compara contra NULL) cuando se crea o modifica un procedimiento. Estas configuraciones se utilizan cuando se ejecuta el procedimiento. Por lo tanto, las configuraciones de cada conexión para estas opciones se ignoran durante la ejecución del SP.

●Minimizar el uso de procedimientos temporales con el fin de evitar contienda en las tablas de sistema de la BD tempdb.

Page 39: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

39Lab. Bases de Datos (EBB) | Unidad V - 2018

Modificación y borrado [1 | 6]

En SQL Server, para modificar un procedimiento se puede usar la sentencia ALTER PROC[EDURE]

En MySQL, la sentencia ALTER PROCEDURE sólo permite modificar algunas características de un procedimiento, no su cuerpo ni parámetros

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En el caso de SQL Server, también se puede modificar un procedimiento desde SSMS, mientras que en MySQL desde alguna herramienta gráfica (Workbench por ejemplo).

●Como en MySQL no se puede modificar el cuerpo o parámetros de un procedimiento mediante la sentencia ALTER PROCEDURE, se deberá borrar y volver a crear el mismo. Para esto resulta de utilidad el comando SHOW CREATE PROCEDURE, el cual muestra la definición del procedimiento, junto con sus parámetros.

Page 40: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

40Lab. Bases de Datos (EBB) | Unidad V - 2018

Modificación y borrado [2 | 6]

Ejemplo SQL Server:

ALTER PROCEDURE asp_listado

AS SELECT P.IdPersona, Apellidos, Nombres,

Domicilio, Email, Tipo, Numero

FROM Personas P JOIN Telefonos T

ON P.IdPersona = T.IdPersona ORDER BY 3, 2

GO

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 41: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

41Lab. Bases de Datos (EBB) | Unidad V - 2018

Modificación y borrado [3 | 6]

Consideraciones (SQL Server):Incluir las opciones que correspondan para la modificación, como WITH ENCRYPTION, WITH RECOMPILE, etc

Sólo se modifica un procedimiento (el externo)

Se necesita tener determinados permisos

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Si Proc1 llama a Proc2, y se modifica Proc1, el cambio es en Proc1 (Proc2 no se ve afectado).

●Cuando se modifica un procedimiento, se mantienen los permisos del mismo.

Page 42: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

42Lab. Bases de Datos (EBB) | Unidad V - 2018

Modificación y borrado [4 | 6]

A veces es necesario recompilar el plan de ejecución:Se agregan/borran/modifican índicesSe cambian los datos en columnas indexadas

Esta recompilación se produce automáticamente:Cuando SQL Server ejecuta la consulta por primera vezSe cambian las tablas subyacentes

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Esta opción no está disponible en MySQL.

Page 43: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

43Lab. Bases de Datos (EBB) | Unidad V - 2018

Modificación y borrado [5 | 6]

Formas de recompilar explícitamente un plan de ejecución:

Especificar WITH RECOMPILE en la sentencia CREATE PROCEDURE

Especificar WITH RECOMPILE en la sentencia EXECUTE

Usar el procedimiento de sistema sp_recompile

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Al especificar WITH RECOMPILE en la sentencia CREATE PROCEDURE, el plan de ejecución no se guarda en el cache, y se recompila cada vez que se ejecuta.

●Al especificar WITH RECOMPILE en la sentencia EXECUTE, se crea un nuevo plan durante la ejecución del procedimiento y se guarda en el cache.

●El procedimiento almacenado de sistema sp_recompile recompila el procedimiento que se le especifica la próxima vez que se ejecute. Se le puede especificar una tabla o vista, con lo cual se recompilan los planes de ejecución de todos los procedimientos asociados.

Page 44: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

44Lab. Bases de Datos (EBB) | Unidad V - 2018

Modificación y borrado [6 | 6]

Borrado de un procedimiento (SQL Server):

DROP PROC[EDURE] dbo.asp_listado

Borrado de un procedimiento (MySQL):

DROP PROCEDURE asp_listado;

Definición

Creación

Recomendaciones

Modificación y borrado

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En el caso de SQL Server, también se puede borrar un procedimiento desde SSMS, mientras que en MySQL desde alguna herramienta gráfica (Workbench por ejemplo).

●En SQL Server se puede emplear el procedimiento sp_depends para ver si otros objetos dependen del que se quiere borrar.

Page 45: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

45Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [1 | 11]

Parámetros de entrada:Permiten pasar información a los procedimientos

Se los debe declarar en la sentencia CREATE PROCEDURE

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 46: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

46Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [2 | 11]

Consideraciones:Verificar al principio del procedimiento los valores de entrada para detectar posibles valores inválidos

Proveer valores por defecto apropiados (SQL Server)

El máximo número de parámetros depende del SGBDR

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En el caso de SQL Server 2008, un procedimiento soporta hasta 2100 parámetros de entrada.

●MySQL no soporta que se especifique un valor por defecto en la definición de un parámetro. Una alternativa consiste en verificar en el cuerpo del procedimiento si el parámetro es null, y en cuyo caso asignarle un valor por defecto. Para esto también se puede emplear la función IFNULL().

Page 47: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

47Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [3 | 11]

Consideraciones:El máximo número de variables locales es limitado solamente por la memoria disponible (depende del SGBDR)

Los parámetros tienen un ámbito local al procedimiento

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 48: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

48Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [4 | 11]

SQL Server:@parámetro tipo_dato [ = valor_defecto]

CREATE PROCEDURE asp_buscar_personas

@cad varchar (100)AS SELECT *

FROM Personas WHERE Apellidos LIKE @cad + '%'

ORDER BY ApellidosGO

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Proyecto AgendaMySQLSQLServer: script AgendaSQLServer.sql

Page 49: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

49Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [5 | 11]

MySQL:parámetro tipo_dato

DELIMITER //CREATE PROCEDURE `asp_buscar_personas`(cad varchar (100))

BEGINSELECT * FROM Personas

WHERE Apellidos LIKE CONCAT(cad ,'%')ORDER BY Apellidos;

END //DELIMITER ;

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Proyecto AgendaMySQLSQLServer: script AgendaMySQL.sql

Page 50: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

50Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [6 | 11]

Llamada a un procedimiento con parámetros de entrada:SQL Server

Por referenciaPor posición

MySQLPor posición

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En el caso de SQL Server, no se puede mezclar ambas formas durante el llamado del procedimiento.

Page 51: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

51Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [7 | 11]

Llamada por referencia:En la sentencia EXEC se especifica el parámetro de la forma @parámetro = valor

El orden de los parámetros puede ser cualquiera

Se pueden omitir parámetros

Se puede especificar @parámetro = DEFAULT

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Si se omiten parámetros, se adoptan los valores por defecto o el valor nulo.

Page 52: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

52Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [8 | 11]

Llamada por referencia:

EXEC asp_buscar_personas @cad = 'Villa'

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 53: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

53Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [9 | 11]

Llamada por posición (SQL Server):Se pasan los valores en el mismo orden en que fueron definidos el procedimiento

Se pueden omitir parámetros en valores por defecto, pero no se debe interrumpir la secuencia

Se usan también valores nulos y DEFAULT como parámetros

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 54: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

54Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [10 | 11]

Llamada por posición (SQL Server):

EXEC asp_buscar_personas 'Villa'

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 55: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

55Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de entrada [11 | 11]

Llamada por posición (MySQL):Se pasan los valores en el mismo orden en el que fueron definidos en el procedimiento

Se usan también valores nulos como parámetros

CALL asp_buscar_personas('Villa');

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 56: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

56Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de salida [1 | 5]

Un procedimiento puede devolver información a quien lo llama en forma de parámetros de salida

SQL Server usa OUTPUT al definir el procedimiento: CREATE PROCEDURE asp_total_personas @cantidad int output

AS SET @cantidad=(SELECT COALESCE(COUNT(IdPersona), 0)

FROM Personas)

GO

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Proyecto AgendaMySQLSQLServer: script AgendaSQLServer.sql

Page 57: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

57Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de salida [2 | 5]

En MySQL, los parámetros pueden ser de 3 tipos:IN (por defecto): quien llame al procedimiento debe proporcionar el parámetro. El procedimiento trabaja con una copia de este parámetro

OUT: el valor del parámetro se puede cambiar en el procedimiento. El procedimiento no puede acceder al valor inicial de este parámetro cuando empieza

INOUT: combinación de las 2 opciones anteriores

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 58: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

58Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de salida [3 | 5]

Ejemplo en MySQL: DELIMITER // CREATE PROCEDURE `asp_total_personas`

(OUT cantidad integer)

BEGIN

SET cantidad = (SELECT COALESCE(COUNT(IDPersona), 0) FROM Personas);

END //

DELIMITER ;

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Proyecto AgendaMySQLSQLServer: script AgendaMySQL.sql

Page 59: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

59Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de salida [4 | 5]

Llamada a un procedimiento con parámetros de salida:SQL Server

Se emplea la cláusula OUTPUT

Quien llama al procedimiento debe tener una variable para guardar el valor de salida

DECLARE @resultado intEXEC asp_total_personas @resultado OUTPUTSELECT 'El resultado es: ' , @resultado

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Quien llama al procedimiento debe tener una variable para guardar el valor de salida, que puede ser de cualquier tipo de datos, salvo text o image.

●Si se omite OUTPUT al llamar al procedimiento, el mismo se ejecuta igual, pero no devuelve el valor que corresponda.

Page 60: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

60Lab. Bases de Datos (EBB) | Unidad V - 2018

Parámetros de salida [5 | 5]

Llamada a un procedimiento con parámetros de salida:MySQL

DECLARE @resultado integerCALL asp_total_personas(@resultado);SELECT @resultado;

Parámetros de entrada

Parámetros de salida

Valores de retorno

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 61: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

61Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [1 | 11]

Mensajes de error:Permiten a los procedimientos comunicar el estado de la transacción al usuario

En SQL Server, para implementar los mensajes de error:Sentencia RETURNProcedimiento sp_addmessageFunción @@errorSentencia RAISERROR

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 62: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

62Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [2 | 11]

Sentencia RETURN:Permite devolver información de un procedimiento

Es más limitado que el uso de parámetros de salida ya que devuelve un único valor entero

Generalmente se la utiliza para devolver un valor de estado o código de error

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

●La sentencia RETURN sale de una consulta o procedimiento incondicionalmente.

Page 63: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

63Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [3 | 11]

Ejemplo RETURN:

ALTER PROC unProc @name varchar(30),

@IDDept smallint OUTPUTAS

IF (@name = '')

RETURN -1

... SET @IDDept = SCOPE_IDENTITY()

RETURN 0GO

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

En el ejemplo se puede ver que si no se pasa un nombre se devuelve -1 (para indicar una condición de falla), y en caso contrario un 0 (para indicar una condición de éxito).

●SQL Server devuelve un 0 automáticamente si no se especifica un valor de retorno.

Page 64: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

64Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [4 | 11]

Ejemplo RETURN (continuación):

DECLARE @dept int, @resultado int

EXEC @resultado = unProc '', @dept OUTPUTIF (@resultado = 0)

SELECT @dept

ELSE

SELECT 'Error'

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Page 65: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

65Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [5 | 11]

Procedimiento sp_addmessage:Crea mensajes de error definidos por el usuario

Todos los mensajes de error (de usuario y sistema) se almacenan en la tabla sysmessages

Se pueden escribir en el Visor de Eventos de Windows

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Page 66: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

66Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [6 | 11]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Ejemplo sp_addmessage:

EXEC sp_addmessage

@msgnum = 50011, @severity = 10,

@msgtext = ‘El registro no puede ser borrado’,

@with_log = ‘TRUE’

●@msgnum: número entero que identifica al mensaje. Para los mensajes creados por el usuario, debe estar entre 50001 y 2147483647.

●@severity: número entero que indica el nivel de gravedad del mensaje. Debe estar entre 1 y 25.

●@with_log: si vale True, el mismo se regitra en el Visor de Eventos de Windows, y si vale False no.

Page 67: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

67Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [7 | 11]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Función @@error:Contiene el número de error de la sentencia T-SQL más reciente

Se borra y resetea con cada sentencia que se ejecuta

Devuelve 0 cuando la sentencia se ejecuta satisfactoriamente

Page 68: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

68Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [8 | 11]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Ejemplo @@error:..IF @error <> 0BEGIN ROLLBACK TRAN RETURNENDCOMMIT TRAN

Page 69: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

69Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [9 | 11]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Sentencia RAISERROR:Genera un mensaje de error definido por el usuario y avisa al sistema que ha ocurrido un error

Puede escribir mensajes de error en el registro de errores de SQL o en el Visor de Eventos de Windows

Page 70: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

70Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [10 | 11]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Ejemplo RAISERROR:EXEC sp_addmessage 50010, 10, 'Mensaje1'EXEC sp_addmessage 50011, 10, 'Mensaje2'

CREATE PROCEDURE dbo.unProcedimiento @member_no int

AS

IF @member_no IS NULL

BEGIN RAISERROR (50010, 10, 1)

RETURN END

●El primer parámetro de RAISERROR identifica al mensaje creado mediante el procedimiento sp_addmessage. Si no se especifica este identificador, RAISERROR genera un mensaje cuyo identificador es 50000.

●El segundo parámetro es el nivel de gravedad asociado con el mensaje (se puede sobrescribir al nivel de gravedad especificado con sp_addmessage). Los niveles entre 0 y 18 los puede especificar cualquier usuario, mientras que los niveles entre 19 y 25 sólo miembros del rol sysadmin, o usuarios con el permiso ALTER TRACE (también se exige la opción WITH LOG).

●El tercer parámetro especifica el estado (entre 0 y 255). No es usado.

Page 71: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

71Lab. Bases de Datos (EBB) | Unidad V - 2018

Mensajes de error [11 | 11]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

MySQL cuenta con la sentencia LEAVE:DELIMITER //

CREATE PROCEDURE borrarOrden(ido integer)SALIR:BEGIN

DECLARE mensaje VARCHAR(100);

IF (ido IS NULL) THEN SELECT 'Mensaje1';

LEAVE SALIR;

END IF;

END //DELIMITER ;

Page 72: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

72Lab. Bases de Datos (EBB) | Unidad V - 2018

Manejo de errores [1 | 4]

SQL Server permite gestionar el tratamiento de excepciones en cualquier situación transaccional, como ser un procedimiento almacenado

Bloque TRY/CATCHTRY: contiene las transacciones protegidas

CATCH: gestiona los errores

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Esta característica está disponible a partir de la versión 2005 de SQL Server.

●El bloque TRY contiene el código transaccional con probabilidades de fallar, mientras que el bloque CATCH contiene el código a ejecutar en caso de producirse un error en el bloque TRY.

●MySQL no soporta esta característica.

Page 73: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

73Lab. Bases de Datos (EBB) | Unidad V - 2018

Manejo de errores [2 | 4]

Ejemplo TRY/CATCH: CREATE PROCEDURE asp_modificar_telefono ...

BEGIN TRY

UPDATE Telefonos SET Tipo = @tipo, Numero = @num WHERE IdPersona = @idp AND IdTelefono = @idt

SET @mensaje = 'Teléfono modificado'

END TRY

BEGIN CATCH SET @mensaje = 'Error al guardar el teléfono'

END CATCH

GO

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Proyecto AgendaMySQLSQLServer: script AgendaSQLServer.sql

Page 74: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

74Lab. Bases de Datos (EBB) | Unidad V - 2018

Manejo de errores [3 | 4]

Recomendaciones:Crear un bloque CATCH inmediatamente después de un bloque TRY

Hacer un ROLL BACK de las transacciones con problemas dentro del bloque CATCH

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●No se puede incluir ninguna sentencia entre las sentencias END TRY y BEGIN CATCH.

●El uso de transacciones permite agrupar múltiples sentencias para que todas se completen de manera exitosa, o ninguna.

Page 75: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

75Lab. Bases de Datos (EBB) | Unidad V - 2018

Manejo de errores [4 | 4]

Recomendaciones (continuación):Si es necesario, capturar la información del error

ERROR_LINEERROR_MESSAGEERROR_NUMBERERROR_PROCEDUREERROR_SEVERITYERROR_STATE

Parámetros de entrada

Parámetros de salida

Mensajes de error

Manejo de errores

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●SQL Server cuenta con un conjunto de funciones para el manejo de errores, las cuales se pueden llamar en el bloque CATCH:

●ERROR_LINE: devuelve la línea donde se produjo el error.

●ERROR_MESSAGE: devuelve el mensaje de error.●ERROR_NUMBER: devuelve un número que identifica el error.

●ERROR_PROCEDURE: devuelve el nombre del procedimiento o trigger donde se produjo el error.

●ERROR_SEVERITY: devuelve un valor indicando la gravedad del error.

●ERROR_STATE: algunos mensajes de error se pueden generar en distintos lugares. Cada condición que genera un mensaje asigna un estado único. Esta función devuelve el estado.

Page 76: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

76Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [1 | 5]

Trigger:Tipo de procedimiento almacenado que se ejecuta automáticamente al modificarse los datos de la tabla sobre la que se lo creó

Cualquier sentencia SQL que se admita en un procedimiento se puede incluir dentro de un trigger

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Cuando ocurre una inserción, modificación o borrado de datos en una tabla, y se definió un trigger para la misma y para esa acción, se ejecuta automáticamente, no pudiéndose detener.

Page 77: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

77Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [2 | 5]

Características:Se usan para mantener la integridad de datos

No devuelven valores

Su principal ventaja es que manejan complejidad de procesamiento

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Aunque un trigger puede devolver valores, no tiene sentido (las aplicaciones no lo esperan).

Page 78: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

78Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [3 | 5]

Características (continuación):Son reactivos mientras que las restricciones (constraints) son proactivas

Se disparan después de la ejecución de sentencias INSERT, UPDATE o DELETE

Una tabla puede tener múltiples triggers del mismo tipo, sin orden de ejecución

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Los triggers son reactivos mientras que las restricciones son proactivas: quiere decir que las restricciones se verifican primero (se verifican antes de la sentencia y del trigger): si se violan las restricciones, el trigger nunca se dispara.

Page 79: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

79Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [4 | 5]

Características (continuación):Los dueños de tablas deben tener permisos para crear, modificar y borrar triggers

No se puede crear triggers en vistas ni en tablas temporales, pero sí las pueden referenciar

No admiten parámetros

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 80: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

80Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [5 | 5]

Usos:Cambios en cascada de tablas relacionadas

Forzado de integridad de datos de manera compleja

Definición de mensajes de error de usuario

Comparación de estados antes y después

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Cambios en cascada de tablas relacionadas: un trigger para borrado en la tabla “Compras” puede borrar todas las filas de la tabla “LineasCompras” (esto se puede ejecutar más eficientemente empleando integridad referencial en cascada).

●Forzado de integridad de datos de manera compleja: los triggers pueden proteger contra inserciones, borrados y modificaciones incorrectas, e imponer restricciones más complejas que las definidas mediante constraints de tipo CHECK.

●Definición de mensajes de error de usuario: los triggers pueden mostrar mensajes de error definidos por el usuario.

●Comparación de estados antes y después: los triggers pueden comparar el estado de una modificación de datos antes y después de dicha modificación y luego ejecutar determinadas acciones según esta diferencia.

Page 81: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

81Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [1 | 25]

Tipos de triggers en SQL Server:AFTER:

Se ejecutan después que se produce la acciónSólo se pueden definir en tablasSe pueden definir varios en una misma tabla

INSTEAD OF: Se ejecutan en lugar de la acción usual del triggerSe pueden definir también en vistas (1 por tabla o vista)

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Los triggers del tipo INSTEAD OF están disponibles a partir de la versión 2005 de SQL Server.

●En versiones previas a la 2005, a los triggers AFTER se los conocía como triggers FOR.

Page 82: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

82Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [2 | 25]

Si una tabla tiene definidas restricciones, triggers AFTER e INSTEAD OF:

Las restricciones se verifican después de la ejecución del trigger INSTEAD OF, pero antes de la de los triggers AFTER

Si se violan las restricciones, las acciones del trigger INSTEAD OF se vuelven atrás y los triggers AFTER nunca se ejecutan

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Los triggers reactivos con respecto a las restricciones son los AFTER. Los triggers INSTEAD OF son proactivos.

Page 83: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

83Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [3 | 25]

En MySQL, al definir un trigger se puede especificar el momento en el que se disparará:

AFTER: el trigger se dispara después de modificar la fila

BEFORE: el trigger se dispara antes de modificar la fila

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 84: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

84Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [4 | 25]

Los triggers se crean con la sentencia CREATE TRIGGER:

Nombre del trigger

Tabla a la cual pertenece el trigger

Evento por el que se dispara el trigger

Cuerpo del procedimiento

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En el caso de SQL Server, también se lo puede hacer desde SSMS, mientras que en MySQL desde alguna herramienta gráfica (Workbench por ejemplo).

●Para crear un trigger, se debe especificar su nombre, la tabla a la cual pertenece, el evento por el que se dispara y el cuerpo del procedimiento.

Page 85: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

85Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [5 | 25]

Consideraciones:Para crear un trigger se requieren determinados permisos

Claúsula IF UPDATE (SQL Server)

Cadena de permisos (SQL Server)

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●En el caso de SQL Server, para crear un trigger se debe ser miembro de los roles db_owner o sysadmin.

●En SQL Server se puede emplear la cláusula IF UPDATE (columna) para focalizar la acción a una determinada columna, y no a todas las columnas de una tabla.

●Es recomendable que dbo sea dueño de los objetos subyacentes para no romper la cadena de permisos.

Page 86: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

86Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [6 | 25]

Consideraciones (continuación):Pueden aceptar cualquier sentencia SQL, salvo:

Todas las sentencias CREATE y DROPALTER (TABLE, DATABASE, PROCEDURE, VIEW y TRIGGER)GRANT, REVOKE y DENYUPDATE STATISTICSRECONFIGURE

LOAD DATABASE y RESTORE DATABASE

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 87: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

87Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [7 | 25]

Trigger para inserción:Se dispara al agregar filas a la tabla en la que está creadoCuando se dispara agrega filas a una tabla llamada inserted (SQL Server) o NEW (MySQL)La tabla inserted o NEW mantiene una copia de las filas que se agregaronSe pueden referenciar las filas de la tabla inserted o NEW desde el trigger

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●La tabla inserted o NEW es una tabla lógica, es decir, sólo se la puede referenciar desde el cuerpo del trigger cuando se ejecuta el mismo.

●Las filas de la tabla inserted o NEW siempre son un duplicado de una o más filas de la tabla del trigger.

●El trigger puede examinar la tabla inserted o NEW para determinar las acciones a ejecutar.

●La tabla NEW es insensible a mayúsculas.

Page 88: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

88Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [8 | 25]

Ejemplo de trigger para inserción:Se tiene la tabla Prestamos con un trigger para inserción:

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

PrestamosPrestamosPrestamosPrestamos

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no outdateoutdate duedateduedate

143

143

121

121

100110041002

100110041002

100110021003

100110021003

02/13/9102/14/9102/14/91

02/13/9102/14/9102/14/91

02/27/9102/28/9102/28/91

02/27/9102/28/9102/28/91

Page 89: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

89Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [9 | 25]

Ejemplo de trigger para inserción:Se hace una inserción en la tabla Prestamos:

INSERT INTO Prestamos VALUES (603, 4, 11, 123, GETDATE(), (GETDATE() + 30))

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

loanloanloanloan

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no outdateoutdate duedateduedate

143

143

121

121

100110041002

100110041002

100110021003

100110021003

02/13/9102/14/9102/14/91

02/13/9102/14/9102/14/91

02/27/9102/28/9102/28/91

02/27/9102/28/9102/28/91

loanloanloanloan

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no outdateoutdate duedateduedate

1443

1443

1121

1121

1001100410041002

1001100410041002

1001100110021003

1001100110021003

02/13/9102/13/9102/14/9102/14/91

02/13/9102/13/9102/14/9102/14/91

02/27/9102/27/9102/28/9102/28/91

02/27/9102/27/9102/28/9102/28/91

4 1 1004 1001 02/13/91 02/27/91

PrestamosPrestamosPrestamosPrestamos

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no outdateoutdate duedateduedate

1443

1443

1121

1121

1001100410041002

1001100410041002

1001100110021003

1001100110021003

02/13/9102/13/9102/14/9102/14/91

02/13/9102/13/9102/14/9102/14/91

02/27/9102/27/9102/28/9102/28/91

02/27/9102/27/9102/28/9102/28/91

603 4 11 123 02/15/91 03/17/91

Page 90: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

90Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [10 | 25]

Ejemplo de trigger para inserción:Se dispara el trigger registrando la inserción en la tabla inserted o NEW:

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

loanloanloanloan

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no outdateoutdate duedateduedate

143

143

121

121

100110041002

100110041002

100110021003

100110021003

02/13/9102/14/9102/14/91

02/13/9102/14/9102/14/91

02/27/9102/28/9102/28/91

02/27/9102/28/9102/28/91

loanloanloanloan

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no outdateoutdate duedateduedate

1443

1443

1121

1121

1001100410041002

1001100410041002

1001100110021003

1001100110021003

02/13/9102/13/9102/14/9102/14/91

02/13/9102/13/9102/14/9102/14/91

02/27/9102/27/9102/28/9102/28/91

02/27/9102/27/9102/28/9102/28/91

4 1 1004 1001 02/13/91 02/27/91

PrestamosPrestamosPrestamosPrestamos

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no outdateoutdate duedateduedate

1443

1443

1121

1121

1001100410041002

1001100410041002

1001100110021003

1001100110021003

02/13/9102/13/9102/14/9102/14/91

02/13/9102/13/9102/14/9102/14/91

02/27/9102/27/9102/28/9102/28/91

02/27/9102/27/9102/28/9102/28/91

603 4 11 123 02/15/91 03/17/91

inserted / NEWinserted / NEWinserted / NEWinserted / NEW

603603 44 1111 123123 02/15/9102/15/91 03/17/9103/17/91

Page 91: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

91Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [11 | 25]

Ejemplo de trigger para inserción:Se ejecuta el cuerpo del trigger:

CREATE TRIGGER prestamos_insert

ON PrestamosAFTER INSERT

AS

UPDATE c SET on_loan = 'Y'

FROM Copias c INNER JOIN inserted I

ON c.isbn = i.sbn AND c.copy_no = i.copy_no

GO

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

CopiasCopiasCopiasCopias

isbnisbn copy_nocopy_no title_notitle_no on_loanon_loan

1443

1443

1121

1121

1001100410041002

1001100410041002

YYNN

YYNN

603 4 11 Y

●En este ejemplo, se puede ver que cuando se inserta una fila en la tabla Prestamos, y en la misma hay definido un trigger para inserción, se actualiza la tabla Copias indicando que la copia del libro que se prestó está en ese estado (prestado).

●Para crear triggers del tipo AFTER se puede emplear esta cláusula, o la cláusula FOR (esta era la única que se podía especificar en versiones previas a la del 2005).

●Para crear triggers del tipo INSTEAD OF se reemplaza AFTER por estas palabras.

Page 92: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

92Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [12 | 25]

Trigger para inserción en MySQL:

DELIMITER //

CREATE TRIGGER Telefonos_Insert AFTER INSERT ON Telefonos

FOR EACH ROW

BEGIN -- cuerpo del trigger

END//

DELIMITER ;

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●Si se especifica la opción FOR EACH ROW, el trigger se ejecuta una vez para cada fila, y si no se especifica esta opción, el trigger se ejecuta una única vez sin importar el número de filas.

Page 93: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

93Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [13 | 25]

Trigger para borrado:Se dispara al borrar filas de la tabla en la que está creadoCuando se dispara agrega filas a una tabla llamada deleted (SQL Server) u OLD (MySQL)La tabla deleted u OLD mantiene una copia de las filas que se borraronSe pueden referenciar las filas de la tabla deleted u OLD desde el trigger

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

●La tabla deleted u OLD es una tabla lógica, es decir, sólo se la puede referenciar desde el cuerpo del trigger cuando se ejecuta el mismo.

●La tabla borrada y la tabla deleted u OLD no tienen filas en común.

●El trigger puede examinar la tabla deleted u OLD para determinar las acciones a ejecutar.

●En el caso de SQL Server, el trigger de borrado no se dispara con la sentencia TRUNCATE TABLE.

●La tabla OLD es insensible a mayúsculas.

Page 94: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

94Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [14 | 25]

Ejemplo de trigger para borrado:Se tiene la tabla Prestamos con un trigger para borrado:

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

PrestamosPrestamosPrestamosPrestamos

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no outdateoutdate duedateduedate

143

143

121

121

100110041002

100110041002

100110021003

100110021003

02/13/9102/14/9102/14/91

02/13/9102/14/9102/14/91

02/27/9102/28/9102/28/91

02/27/9102/28/9102/28/91

Page 95: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

95Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [15 | 25]

Ejemplo de trigger para borrado:Se borra una fila de la tabla Prestamos:

DELETE PrestamosWHERE isbn = 4 AND copy_no = 1

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

PrestamosPrestamosPrestamosPrestamos

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no outdateoutdate duedateduedate

1443

1443

1121

1121

1001100410041002

1001100410041002

1001100110021003

1001100110021003

02/13/9102/13/9102/14/9102/14/91

02/13/9102/13/9102/14/9102/14/91

02/27/9102/27/9102/28/9102/28/91

02/27/9102/27/9102/28/9102/28/91

4 1 1004 1001 02/13/91 02/27/91

Page 96: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

96Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [16 | 25]

Ejemplo de trigger para borrado:Se dispara el trigger registrando la inserción en la tabla deleted u OLD:

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

PrestamosPrestamosPrestamosPrestamos

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no outdateoutdate duedateduedate

143

143

121

121

100110041002

100110041002

100110021003

100110021003

02/13/9102/14/9102/14/91

02/13/9102/14/9102/14/91

02/27/9102/28/9102/28/91

02/27/9102/28/9102/28/91

deleted / OLDdeleted / OLDdeleted / OLDdeleted / OLD

44 11 10041004 10011001 02/13/9102/13/91 02/27/9102/27/91

Page 97: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

97Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [17 | 25]

Ejemplo de trigger para borrado:Se ejecuta el cuerpo del trigger:

CREATE TRIGGER prestamos_delete

ON PrestamosAFTER DELETE

AS

UPDATE c SET on_loan = 'N'

FROM Copias c INNER JOIN deleted d

ON c.isbn = d.isbn AND c.copy_no = d.copy.no

GO

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

CopiasCopiasCopiasCopias

isbnisbn copy_nocopy_no title_notitle_no on_loanon_loan

1443

1443

1121

1121

1001100410041002

1001100410041002

YYNN

YYNN

4 1 1004 N

●En este ejemplo, se puede ver que cuando se borra una fila de la tabla Prestamos, y en la misma hay definido un trigger para borrado, se actualiza la tabla Copias indicando que la copia del libro que se prestó ya no está en estado de prestado, sino devuelto.

Page 98: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

98Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [18 | 25]

Trigger para modificación:Se dispara al modificar filas en la tabla en la que está creadoCuando se dispara las filas originales se mueven a la tabla deleted u OLD, y las filas modificadas se insertan a la tabla inserted o NEWSe pueden referenciar las filas de estas tablas desde el trigger

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Page 99: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

99Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [19 | 25]

Ejemplo de trigger para modificación:Se modifica una fila de la tabla Miembros, la cual tiene un trigger para modificación:

UPDATE MiembrosSET member_no = 10021

WHERE member_no = 1234

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

MiembrosMiembrosMiembrosMiembros

member_nomember_no lastnamelastname firstnamefirstname middleinitialmiddleinitial photographphotograph

10020100211002210023

10020100211002210023

AndersonBarrBarrAnderson

AndersonBarrBarrAnderson

AndrewAndrewBillBill

AndrewAndrewBillBill

ARNULLB

ARNULLB

~~~~~~~~~

~~~~~~~~~

1234 Barr Andrew R ~~~

Page 100: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

100Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [20 | 25]

Ejemplo de trigger para modificación:Se registra la modificación como 2 pasos:

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

deleted / OLDdeleted / OLDdeleted / OLDdeleted / OLD

12341234 BarrBarr AndrewAndrew RR ~~~~~~

inserted / NEWinserted / NEWinserted / NEWinserted / NEW

1002110021 BarrBarr AndrewAndrew RR ~~~~~~

Page 101: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

101Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [21 | 25]

Ejemplo de trigger para modificación:Se ejecuta el cuerpo del trigger:

CREATE TRIGGER member_update ON Miembros

AFTER UPDATE

AS IF UPDATE (member_no)

BEGIN

RAISERROR ('Error', 10, 1) ROLLBACK TRANSACTION

...

Definición

Administración

Anidamiento y recursividad

Ejemplos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

MiembrosMiembrosMiembrosMiembros

member_nomember_no lastnamelastname firstnamefirstname middleinitialmiddleinitial photographphotograph

10020100211002210023

10020100211002210023

AndersonBarrBarrAnderson

AndersonBarrBarrAnderson

AndrewAndrewBillBill

AndrewAndrewBillBill

ARNULLB

ARNULLB

~~~~~~~~~

~~~~~~~~~

1234 Barr Andrew R ~~~

●En este ejemplo, se puede ver que cuando se modifica una fila de la tabla Miembros, y en la misma hay definido un trigger para modificación, la operación se retrotrae si lo que se quiere modificar es la columna member_no.

●Un trigger, junto con la sentencia que lo dispara, son tratados como una sola transacción (no hace falta iniciar explícitamente la transacción). Esta transacción se puede volver atrás dentro del cuerpo del trigger (por esta razón, hay un ROLLBACK TRANSACTION sin un BEGIN TRANSACTION.

Page 102: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

102Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [22 | 25]

Modificación de un trigger (SQL Server):Sentencia ALTER TRIGGER

ALTER TRIGGER prestamos_insert

ON Prestamos AFTER INSERTAS UPDATE c

SET on_loan = 'y'

FROM Copias c INNER JOIN inserted i ON c.isbn = i.isbn AND c.copy_no = i.copy_no

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

●Igual que en caso de los procedimientos almacenados, MySQL no soporta la modificación de triggers.

Page 103: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

103Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [23 | 25]

Borrado de un trigger:Sentencia DROP TRIGGER

DROP TRIGGER prestamos_insert

Cuando se borra una tabla, se borran todos sus triggers

Sólo el dueño de una tabla tiene permiso para borrar un trigger de la misma

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 104: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

104Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [24 | 25]

Información sobre triggers:SQL Server:

Triggers de una tabla: sp_depends tablaDefinición del trigger: sp_helptext trigger

MySQLInformación sobre triggers:

SELECT * FROM information_schema.triggers

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 105: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

105Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [25 | 25]

Consideraciones de rendimiento:Los triggers se ejecutan rápidamente porque las tablas inserted (o NEW) y deleted (u OLD) están en el cache

El tiempo de ejecución está determinado por:Número de tablas referenciadasNúmero de filas afectadas

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 106: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

106Lab. Bases de Datos (EBB) | Unidad V - 2018

Anidamiento y recursividad [1 | 7]

Anidamiento:Un trigger puede contener sentencias INSERT, UPDATE y DELETE que afecten a otras tablas y, por ende, disparen otros triggers

En SQL Server, se puede habilitar o deshabilitar la opción de anidamiento (por defecto está habilitada)

MySQL no soporta el anidamiento de triggers

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 107: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

107Lab. Bases de Datos (EBB) | Unidad V - 2018

Anidamiento y recursividad [2 | 7]

Consideraciones:Los disparos sucesivos de triggers pueden ocurrir hasta en 32 niveles (cuando un trigger supera este nivel, termina y deshace la transacción)

Un trigger no se dispara 2 veces en un llamado (autollamada)

Como el trigger es una sola transacción, cualquier error en cualquier nivel retrotrae toda la transacción

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

●En SQL Server se puede ver el nivel de anidamiento con la función @@NESTLEVEL.

●Que un trigger no se dispare 2 veces en un llamado significa que no se dispara a sí mismo como respuesta a una segunda modificación en la misma tabla. Sin embargo, si un trigger T1 modifica una tabla, y esta modificación dispara un trigger T2, el cual modifica la tabla original, el trigger T1 se disparará recursivamente. Para evitar esto, se debe deshabilitar la opción de anidamiento.

Page 108: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

108Lab. Bases de Datos (EBB) | Unidad V - 2018

Anidamiento y recursividad [3 | 7]

Razones para desactivar el anidamiento:Requiere un diseño planeado y una complejidad apreciableLas modificaciones de las tablas no siguen el orden esperado

Para desactivar el anidamiento:sp_configure 'nested triggers', 0

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

●Cuando se deshabilita la opción de anidamiento, si un trigger modifica una tabla, esta modificación no dispara el trigger asociado.

Page 109: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

109Lab. Bases de Datos (EBB) | Unidad V - 2018

Anidamiento y recursividad [4 | 7]

Recursividad:Un trigger puede tener sentencias UPDATE, INSERT o DELETE que afecten a la misma tabla u otra

La activación de recursividad hace que el trigger pueda activarse él mismo hasta una condición de parada

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 110: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

110Lab. Bases de Datos (EBB) | Unidad V - 2018

Anidamiento y recursividad [5 | 7]

Tipos de recursividad:Recursividad directa: una modificación en la tabla T1 dispara el trigger Trig1, que modifica la tabla T1 y se dispara nuevamente

Recursividad indirecta: una modificación en la tabla T1 dispara el trigger Trig1, que modifica la tabla T2, disparándose el trigger Trig2 de T2, que modifica la tabla T1, disparándose Trig1 nuevamente

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

●Los triggers recursivos son muy complejos y difíciles de implementar, pero brindan soluciones excelentes para relaciones autoreferenciadas.

Page 111: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

111Lab. Bases de Datos (EBB) | Unidad V - 2018

Anidamiento y recursividad [6 | 7]

Consideraciones:La recursividad admite 32 niveles, y por defecto está deshabilitada

Las tablas inserted y deleted contienen las filas que corresponden sólo a las sentencias del último trigger

Si la opción de anidamiento está deshabilitada, también lo está la opción de recursividad

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 112: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

112Lab. Bases de Datos (EBB) | Unidad V - 2018

Anidamiento y recursividad [7 | 7]

Consideraciones:Si la opción de anidamiento está habilitada, la recursividad indirecta se puede producir, aunque la opción de recursividad esté deshabilitada

Para activar la recursividad:

sp_dboption nombre_db, 'recursive triggers', TRUE

ALTER DATABASE <bd> SET RECURSIVE_TRIGGERS ON

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 113: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

113Lab. Bases de Datos (EBB) | Unidad V - 2018

Ejemplos [1 | 9]

Forzado de la integridad de datosLa tabla Reservas tiene las reservas que hacen los miembros de una biblioteca sobre los distintos libros

Cuando se presta un libro a un miembro, se registra el préstamo en la tabla Prestamos

Si el miembro tenía una reserva del libro, la misma debe borrarse de la tabla Reservas

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 114: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

114Lab. Bases de Datos (EBB) | Unidad V - 2018

Ejemplos [2 | 9]

Forzado de la integridad de datos

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

PrestamosPrestamosPrestamosPrestamos

isbnisbn copy_nocopy_no mem_nomem_no

14431

14431

11212

11212

17431

17431

4 1 7 InserciónInserción

ReservasReservasReservasReservas

isbnisbn

11234

112344

mem_nomem_no

12117

121177

log_datelog_date

07/14/9807/12/9806/07/9807/14/9807/14/98

07/14/9807/12/9806/07/9807/14/9807/14/9807/14/98

remarksremarks

~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~Trigger borra filaTrigger borra fila

Page 115: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

115Lab. Bases de Datos (EBB) | Unidad V - 2018

Ejemplos [3 | 9]

Forzado de la integridad de datosCREATE TRIGGER reservation_deleteON loan FOR INSERT

AS

IF (SELECT r.member_no

FROM Reservas r JOIN inserted i ON r.member_no=i.member_no AND r.isbn=i.isbn) > 0

BEGIN

DELETE r FROM Reservas r JOIN inserted i

ON r.member_no = i.member_no AND r.isbn = i.isbn

END

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 116: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

116Lab. Bases de Datos (EBB) | Unidad V - 2018

Ejemplos [4 | 9]

Forzado de las Reglas de NegocioLa tabla Miembros tiene los miembros de una biblioteca, los cuales pueden reservar libros

Cuando se presta un libro a un miembro, se registra el préstamo en la tabla Prestamos

Para poder borrar un miembro, el mismo no debe tener préstamos realizados

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 117: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

117Lab. Bases de Datos (EBB) | Unidad V - 2018

Ejemplos [5 | 9]

Forzado de las Reglas de Negocio

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

membermembermembermember

member_nomember_no lastnamelastname firstnamefirstname

1234

1234

AndersonBarrBarrAnderson

AndersonBarrBarrAnderson

AndrewAndrewBillBill

AndrewAndrewBillBill

2 Barr Andrew

membermembermembermember

member_nomember_no lastnamelastname firstnamefirstname

134

134

AndersonBarrAnderson

AndersonBarrAnderson

AndrewBillBill

AndrewBillBill

MiembrosMiembrosMiembrosMiembros

member_nomember_no lastnamelastname firstnamefirstname

1234

1234

AndersonBarrBarrAnderson

AndersonBarrBarrAnderson

AndrewAndrewBillBill

AndrewAndrewBillBill

2 Barr Andrew

PrestamosPrestamosPrestamosPrestamos

isbnisbn copy_nocopy_no title_notitle_no mem_nomem_no

1443

1443

1121

1121

1443

1443

1123

11232

Page 118: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

118Lab. Bases de Datos (EBB) | Unidad V - 2018

Ejemplos [6 | 9]

Forzado de las Reglas de Negocio

IF (SELECT COUNT(*) FROM Prestamos p JOIN deleted d

ON p.member_no = d.member_no) > 0

ROLLBACK TRANSACTION

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 119: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

119Lab. Bases de Datos (EBB) | Unidad V - 2018

Ejemplos [7 | 9]

AuditoríaLa tabla Productos tiene los productos que vende un negocio

Cada vez que se agrega un nuevo producto, se quiere saber, además del producto que se agregó, el usuario que lo hizo, desde qué máquina lo hizo y la fecha

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 120: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

120Lab. Bases de Datos (EBB) | Unidad V - 2018

Ejemplos [8 | 9]

AuditoríaCREATE TABLE `AuditoriaProductos` ( `ID` INT NOT NULL AUTO_INCREMENT,

`Tipo` CHAR(1) NOT NULL, -- tipo de operación

`Fecha` DATETIME NOT NULL,

`Host` VARCHAR(45) NOT NULL, `Usuario` VARCHAR(45) NOT NULL,

`IDProducto` INT NOT NULL,

`Nombre` VARCHAR(60) NOT NULL, `Descripcion` TEXT NOT NULL,

PRIMARY KEY (`ID`)

);

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

Page 121: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

121Lab. Bases de Datos (EBB) | Unidad V - 2018

Ejemplos [9 | 9]

AuditoríaDELIMITER //CREATE TRIGGER `Trig_Productos_Ins`

AFTER INSERT ON `Productos` FOR EACH ROW

BEGIN

INSERT INTO AuditoriaProductos VALUES (DEFAULT, 'I', NOW(),

SUBSTRING_INDEX(USER(), '@', -1),

SUBSTRING_INDEX(USER(), '@', 1), NEW.IDProducto, NEW.Nombre, NEW.Descripcion);

END //

DELIMITER ;

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Administración

Anidamiento y recursividad

Ejemplos

●En MySQL la función user() devuelve el usuario actual y la máquina como una cadena. Por ejemplo: 'juan@localhost'.

●La función substring_index() devuelve una subcadena de la cadena espeificada. En el primer caso, devuelve todo a la derecha del delimitador '@' ('localhost'), y en el segundo caso devuelve todo a la izquierda del delimitador '@' ('juan').

Page 122: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

122Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [1 | 3]

Triggers DMLSe disparan cuando se modifican filas en una tabla (inserción, borrado, modificación)

Triggers DDLSe disparan cuando se ejecutan sentencias DDL (CREATE, ALTER, DROP, etc)

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Creación

Administración

●DML: Data Manipulation Language.

●DDL: Data Definition Language

●A diferencia de los triggers DML, los cuales responden a cambios en los datos, los triggers DDL responden a acciones sobre los distintos objetos de la BD, por ejemplo, cuando se crea una tabla.

●Los triggers DDL están disponibles desde la versión 2005 de SQL Server. No son soportados por MySQL.

Page 123: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

123Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [2 | 3]

Alcance de un trigger DDLNivel BD: se disparan cuando se produce un evento en una determinada BD

Nivel Servidor: se disparan independientemente de la BD usada

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Creación

Administración

●Ejemplo de triggers DDL con alcance a nivel BD: manipulación de tablas, vistas, índices, usuarios, procedimientos almacenados, etc.

●Ejemplo de triggers DDL con alcance a nivel servidor: manipulación de logins, certificados de seguridad, etc.

Page 124: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

124Lab. Bases de Datos (EBB) | Unidad V - 2018

Definición [3 | 3]

Proceso de un trigger DDLEjecución de una sentencia DDL

Realización de la acción de la sentencia DDL

Disparo del trigger DDL

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Creación

Administración

●Los triggers DDL se disparan cuando se completa la acción que lo dispara. Por ejemplo, un trigger que se dispare cuando se borre una tabla, se disparará después de borrar la tabla (no hay un equivalente a los triggers INSTEAD OF para las operaciones DDL).

●Se puede retrotraer la acción haciendo ROLLBACK TRANSACTION, con lo cual se vuelve atrás toda la operación, incluyendo la operación DDL que disparó el trigger.

●Una única operación DDL puede disparar múltiples triggers. El orden en el que se disparan no está documentado.

Page 125: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

125Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [1 | 5]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Creación

Administración

Los triggers DDL se crean con la sentencia CREATE TRIGGER, con algunas extensiones:

Nombre del trigger

Alcance del trigger: ON DATABASE | ON ALL SERVER

Evento del trigger: eventdata() y query()

●Cuando se crea un trigger DDL se debe especificar, además de su nombre, su alcance y evento que lo dispara.

●Para especificar un alcance a nivel BD se emplea “ON DATABASE”, y para el alcance a nivel servidor “ON ALL SERVER”.

●Los triggers DML crean las tablas inserted y deleted, no así los triggers DDL. Para éstos se puede usar la función eventdata() para obtener información sobre el evento que dispara el trigger. Luego, mediante el método query() se extrae información relacionada al evento.

Page 126: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

126Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [2 | 5]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Creación

Administración

Función eventdata():Devuelve un documento XML cuyo contenido varía según el objetivo del trigger DDL

En todos estos documentos siempre está:<PostTime>: instante en el que se disparó el trigger<SPID>: ID del proceso que disparó el trigger<EventType>: tipo de evento que disparó el trigger

Page 127: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

127Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [3 | 5]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Creación

Administración

Ejemplo: trigger para el comando UPDATE STATISTICS

<EVENT_INSTANCE> <PostTime>2004-06-18T02:14:20.640</PostTime>

<SPID>58</SPID>

<EventType>UPDATE_STATISTICS</EventType> <ServerName>SQL2005PC</ServerName>

<LoginName>SQL2005PC\Administrator</LoginName>

<UserName>SQL2005PC\Administrator</UserName> <DatabaseName>AdventureWorks</DatabaseName>

...

</EVENT_INSTANCE>

Page 128: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

128Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [4 | 5]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Creación

Administración

Método query():Extrae información del evento a partir del documento generado por la función eventdata()

Ejemplo: para extraer el nombre de la BD:DECLARE @data XML

DECLARE @db NVARCHAR(100)

SET @data = eventdata()SET @db = CONVERT(NVARCHAR(100),

@data.query('data(//DatabaseName)'))

Page 129: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

129Lab. Bases de Datos (EBB) | Unidad V - 2018

Creación [5 | 5]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Creación

Administración

Ejemplo:

CREATE TRIGGER UpdStatsON DATABASE FOR UPDATE_STATISTICS

AS

DECLARE @data XML DECLARE @db NVARCHAR(100)

SET @data = eventdata()

SET @db = CONVERT(NVARCHAR(100), @data.query('data(//DatabaseName)'))

PRINT @db

GO

Page 130: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

130Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [1 | 2]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Creación

Administración

Información sobre triggers:Triggers de una tabla: sys.triggers.Definición del trigger: sys.sql_modules.

Modificación de un trigger:

ALTER TRIGGER UpdStats

ON DATABASE FOR UPDATE_STATISTICSAS

...

●Se puede obtener el listado de los triggers de una BD, incluyendo los triggers DDL, haciendo:

SELECT * FROM sys.triggers.

●Para ver la definición de un trigger:

SELECT * FROM sys.sql_modules.

●La sintaxis para modificar un trigger DDL es muy similar a la de un trigger DML. Se puede cambiar el evento que dispara el trigger, encriptar su definición, modificar el cuerpo, etc.

Page 131: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

131Lab. Bases de Datos (EBB) | Unidad V - 2018

Administración [2 | 2]

Procedimientos almacenados

Parametrización

Triggers

Triggers DDL

Definición

Creación

Administración

Borrado de un trigger:

DROP TRIGGER UpdStats ON DATABASE

●Al borrar o modificar un trigger se debe especificar ON DATABASE u ON ALL SERVER. Si no se lo hace, SQL Server asume que se trata de un trigger DML, generándose un error.

Page 132: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

132Lab. Bases de Datos (EBB) | Unidad V - 2018

Resumen [1 | 2]

Definición de procedimiento almacenadoCreación, modificación y borradoRecomendacionesProcedimientos almacenados con parámetros de entrada y salidaMensajes de errorManejo de erroresDefinición de triggerCreación, modificación y borrado

Page 133: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

133Lab. Bases de Datos (EBB) | Unidad V - 2018

Resumen [2 | 2]

Anidamiento y recursividadEjemplosDefinición de trigger DDLCreación, modificación y borrado

Page 134: Laboratorio de Bases de Datos - catedras.facet.unt.edu.ar · que el SGBDR ejecutará la consulta (plan estimado)

134Lab. Bases de Datos (EBB) | Unidad V - 2018

Otro material [1 | 1]

Plan de ejecuciónhttps://www.simple-talk.com/sql/performance/execution-plan-basics/

Explain (MySQL)http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/