Escolar Documentos
Profissional Documentos
Cultura Documentos
& Disparadores
Procedimientos almacenados
Un procedimiento almacenado es un conjunto de sentencias
SQL y de control de flujo
Beneficios de los procedimientos almacenados:
Simplifican la ejecucin de tareas repetitivas
Corren ms rpido que las mismas instrucciones ejecutadas en
forma interactiva
Reducen el trfico a travs de la red
Pueden capturar errores antes que ellos puedan entrar a la base
de datos
Establece consistencia porque ejecuta las tareas de la misma
forma
Permite el desarrollo modular de aplicaciones
Ayuda a proveer seguridad
Puede forzar reglas y defaults complejos de los negocios
Triggers
Procedimientos extendidos
Ventajas en el rendimiento
Un procedimiento almacenado se ejecuta ms rpido que un
batch porque:
El procedimiento almacenado ya ha sido analizado
Ya se han resuelto las referencias a los objetos
referenciados en el procedimiento almacenado
No se necesita construir el rbol de bsqueda, l usa el que
se hace en el momento de compilarlo
No se necesita crear un plan de bsqueda, porque ya el
procedimiento tiene uno
Ejemplo:
Ejemplo:
Ejemplo:
execute proc_update_titles
Variables
Los procedimientos almacenados pueden crear y usar
variables locales
Las variables slo existen mientras exista el procedimiento
Las variables no las puede usar otro proceso
Ejemplo:
use database
create view
create default
create rule
create procedure
create trigger
Ejemplo:
grant execute
on proc_update_titles
to tjovanka, vturlough, pbrown
Ejecutar el procedimiento:
exec proc_hello
Parmetros de entrada
Un parmetro de entrada es una variable local
al procedimiento almacenado que puede
recibir un valor desde el mandato exec
procedure Sentencia
Ejemplo:
create procedure proc_author_info
(@lname varchar(40), @fname varchar(20))
as
-- lists the author and his or her books
select au_lname, au_fname, title
from authors, titles, titleauthor
where au_fname = @fname
and au_lname = @lname
and authors.au_id = titleauthor.au_id
and titles.title_id = titleauthor.title_id
return
Pasar parmetros
Dos mtodos para pasar valores a parmetros:
Paso de parmetros por posicin
Paso de parmetros por nombre
Ejemplo:
au_fname
-------Albert
Albert
title
-----
Ejemplo:
exec proc_author_info
@lname = "Ringer", @fname = "Albert"
au_lname
-------Ringer
Ringer
au_fname
-------Albert
Albert
title
----Is Anger the Enemy?
Life Without Fear
au_lname
-------White
Green
...
state
----CA
CA
au_fname
-------Johnson
Marjorie
Parmetros de entrada
Crear un procedimiento almacenado que tenga un parmetro
de entrada:
Parmetros de entrada
Ejecutar el procedimiento con y sin un valor para el
parmetro de entrada:
exec proc_hello_def
exec proc_hello_def "<yourname>"
Retorno de valores
Un parmetro de salida es una variable local
del procedimiento almacenado que puede ser
enviada como entrada a otro procedimiento.
Ejemplo:
Ejemplo:
Trigger
Un trigger es un procedimiento almacenado asociado
con una tabla, el cual se ejecuta automticamente
cuando se modifica un dato de esa tabla
User-Defined
Can It Be
Can It Be
Can It Use
Explicitly
Executed
Parameters?
Called?
Automatically?
Yes
No
Yes
No
Yes
No
Stored
Procedure
Trigger
Definicin de un trigger
Un trigger se define asociado con una tabla para una o
ms sentencias de manipulacin de datos
Un trigger se puede definir para insert, update, o delete o
cualquier combinacin de ellos
Activacin de un trigger
Cuando se modifica un dato en una tabla que tiene declarado
un trigger para esa sentencia, el trigger se dispara
El trigger se dispara una vez, independientemente del nmero de filas
afectadas
El trigger se dispara aunque no hayan filas afectadas
Llamarse directamente
Usar parmetros
Definirse sobre tablas temporales o vistas
Crear objetos permanentes de base de datos
Crear triggers
Sintaxis simplificada:
create trigger trigger_name
on table_name
for {insert | update | delete} [, {insert | update | delete} ...]
as
sql_statements
Ejemplo:
Borrar Triggers
Sintaxis simplificada:
drop trigger trigger_name
Ejemplo:
Triggers - ejemplo
Crear dos tablas:
datetime,
int
Triggers - ejemplo
Ejecutar un delete y ver la tabla myrecords:
delete from myauthors
where state = "CA"
select * from myrecord
Borrados
Un delete agrega filas a la tabla temporal
deleted
Inserciones
Un insert agrega filas a la tabla temporal
inserted
Actualizaciones
Un update agrega filas en ambas tablas
update titles
set total_sales = isnull(total_sales, 0) +
(select sum(qty)
from inserted
where titles.title_id = inserted.title_id)
where title_id in (select title_id from inserted)
return
Triggers y rollbacks
Tres tipos de rollbacks:
Deshacer el trigger
Deshacer el trigger y la sentencia que lo dispar
Deshacer toda la transaccin
Deshacer un trigger
Para deshacer un trigger, declarar un punto de grabacin y luego
hacer el rollback
Un rollback sin punto de grabacin deshace toda la transaccin
Procedimiento almacenado
Trigger
Caso A
begin tran
...
insert ...
print "in sp"
...
commit tran
print "sp done"
Procedimiento almacenado
Caso B
(este caso
ocaciona un
error)
begin tran
...
insert ...
print "in sp"
...
commit tran
print "sp done"
save tran s1
....
rollback tran s1
print tr done
return
Trigger
begin tran s2
....
rollback tran s2
print tr done
return
Deshacer un trigger
rollback trigger deshace el trigger y la sentencia que lo
dispar
Sintaxis:
rollback trigger [with raiserror error_number [error_statement] ]
Ejemplo:
Deshacer un trigger
Procedimiento almacenado
Case C
begin tran
...
insert ...
print "in sp"
...
commit tran
print "sp done"
Trigger
....
....
rollback trigger
print tr done
return
Procedimiento almacenado
Case E
begin tran
...
insert ...
print "in sp"
...
commit tran
print "sp done"
...
rollback tran
print "tr done
return
Trigger
....
....
Rollback tran
print tr done
return
Triggers anidados
Un trigger anidado es un trigger que se dispara en respuesta
a una modificacin hecha en un trigger
Triggers recursivos
Un trigger recursivo es aquel que se dispara cuando
modifica su propia tabla
Entity Integrity
Referential
Integrity
Constraints
Check
constraints
Primary key
constraints,
unique
constraints
References
constraints
Database
Objects
Rules
Indexes
Triggers
Restricciones
Triggers
Permitido
Permitido
Permitido
Permitido
No permitido*
Permitido
Permitido
Permitido
No permitido*
Permitido
Permitido
Permitido
Restricciones vs triggers
Ventajas de las restricciones:
Las restricciones (y reglas) son ms rpidas que los triggers
Las restricciones no requieren codificacin adicional
Es mejor para chequear datos antes de ingresarlos a la base
de datos