Anda di halaman 1dari 8

Taller de Bases de Datos

En una planificacin, dos instrucciones estn en conflicto


cuando:
1. Pertenecen a transacciones diferentes.
2. Se aplican al mismo dato.
3. Al menos una de ellas es una operacin escribir.

Stored Procedure
En relacin a las bases de datos transaccionales, el
procesamiento de la informacin es una tarea ardua para los
programadores de sistemas de informacin. Los
procedimientos almacenados (stored procedures) son
procedimientos semejantes a una funcin en las bases de datos,
que nos permite ejecutar un conjunto de instrucciones con la
finalidad de interactuar con la informacin de la base de datos -

MTI Rodrigo Villegas Tllez


Taller de Bases de Datos

para lograr un fin comn.

Sintaxis para desarrollar un stored procedure


create procedure nombre_procedure variables_externas
as
declare variables_internas
instrucciones

Sintaxis para ejecutar un stored procedure


exec nombre_procedure valor_variables_externas

Para comprender ms el empleo y desarrollo de un stored


procedure, supongamos que deseo brindar el nombre de un
pas (considerando la base de datos Northwind) y que el SMBD
me muestre el nombre, direccin, ciudad y cdigo postal de
todos los empleados que viven en tal pas. El empleo de un
stored procedure o sp sera de la siguiente manera:

create procedure mi_proc @var1 varchar(50)


as
select firstname, address, city, postalcode
from employees
where country = @var1

El stored procedure anterior se llama mi_proc y utiliza una


variable externa llamada @var1. Es importante mencionar que
toda variable empieza con @ y posteriormente debe definirse
su tipo de dato, en este caso como almacenar el nombre de -

MTI Rodrigo Villegas Tllez


Taller de Bases de Datos

un pas, se opt por ser de tipo varchar con longitud de 50


caracteres. Posteriormente vienen las instrucciones que deber
ejecutar el sp en base a la variable dada, las cuales realizan una
consulta sobre la tabla employees para recuperar el nombre,
direccin, ciudad y cdigo postal de los empleados cuyo pas
sea lo almacenado en @var1 , es decir, si al ejecutar el sp pongo
USA, el SMBD a travs del sp me devolver los datos de la
consulta considerando los empleados de USA.

exec mi_proc USA

Una observacin importante es que el sp debe de crearse y


ejecutarse estando seleccionada la base de datos Northwind
para que reconozca la tabla employees.

En el ejemplo anterior no usamos variables internas; la


diferencia entre las variables externas y las variables internas
consiste en que las variables externas sern solicitadas al
ejecutarse el sp, y las variables internas no, ya que ests podrn
emplearse como variables auxiliares dentro del sp.

Para el ejemplo de nuestro sp, veamos en la base de datos


PAPELERIA la tabla DETALLE_VENTA como aquella que
almacena los datos de un ticket de compra de un
supermercado, esta tabla necesita guardar el id de la venta, el id
del producto que se est vendiendo (considerando que son
varios los productos que se pueden vender), la cantidad del
producto vendido y el subtotal para este producto, el cual -

MTI Rodrigo Villegas Tllez


Taller de Bases de Datos

consiste en la cantidad por el precio del producto. La suma de


los subtotales de todos los productos vendra a ser el total de la
venta, sin embargo este dato se guarda en la tabla VENTA.

Ahora bien, en la base de datos PAPELERIA deseamos


programar un sp que al brindarle un id de venta (IDV) y un id
de producto (IDP) me calcule el subtotal (cantidad * precio). El
sp necesita ambos ids para identificar el id del producto, la
cantidad, el precio y ubicar el registro que se actualizar para
registrar el subtotal.

Es importante considerar que la tabla DETALLE_VENTA ya


debe tener registros y el subtotal debe estar en cero, para que
nuestro sp calcule el subtotal de un registro ya existente.

MTI Rodrigo Villegas Tllez


Taller de Bases de Datos

create procedure tu_proc @varIDV tinyint, @varIDP tinyint


as
declare @varCantidad smallint, @varPrecio money
select @varCantidad = cantidad
from DETALLE_VENTA
where IDV = @varID and IDP = @varIDP
select @varPrecio = Precio
from PRODUCTO
where IDP = @varIDP
update DETALLE_VENTA
set subtotal = @varCantidad * @VarPrecio
where IDV = @varID and IDP = @varIDP

En el ejemplo anterior si deseamos saber el subtotal del


producto 4 vendido en la venta 1, bastara ejecutar el sp con
dichos datos.

exec tu_proc 1,4

Entonces el sp almacena las variables externas de la siguiente


forma:

@varIDV = 1
@varIDP = 4

MTI Rodrigo Villegas Tllez


Taller de Bases de Datos

Y calcula el subtotal del producto 4 vendido en la venta 1. Las


variables internas no se solicitan al ejecutarse el sp, pero si
fueron tiles para guardar la cantidad vendida del producto 4 y
el precio del producto 4 para calcular el subtotal.

Trigger
De la misma forma que un procedimiento almacenado, un
trigger nos permite ejecutar un conjunto de instrucciones con
la finalidad de interactuar con la informacin de la base de
datos para lograr un fin comn. La diferencia radica en que el
sp espera ser ejecutado mediante una instruccin exec, y un
trigger se ejecuta automticamente dependiendo del
comportamiento de la base de datos.

Sintaxis para desarrollar un trigger


create trigger nombre_trigger
on tabla
for [insert, update, delete]
as
declare variables_internas
instrucciones

La definicin del ON y FOR del trigger son fundamentales, en


el ON ponemos la tabla en la cual esperamos suceda un evento
insert, update o delete para ejecutar las instrucciones que
registremos en el trigger. Por ejemplo:

MTI Rodrigo Villegas Tllez


Taller de Bases de Datos

create trigger tr_ventas


on Producto
for Delete
as
instrucciones

En el ejemplo de arriba las instrucciones del trigger se


ejecutarn automticamente al realizarse un borrado en la tabla
Producto.

Usemos el mismo ejemplo visto en el tema de procedimiento


almacenado de la unidad anterior, para el caso del sp
recordemos que se utiliz la base de datos PAPELERIA,
brindndole al sp un id de venta (IDV) y un id de producto
(IDP) para calcular el subtotal (cantidad * precio). El sp
necesit ambos ids para identificar el id del producto, la
cantidad, el precio y ubicar el registro que se actualiz para
registrar el subtotal.

Para el trigger esperaramos que sucediera un insert en la tabla


DETALLE_VENTA para ejecutar las instrucciones que me
ayuden a calcular el subtotal. A diferencia del sp, en nuestro
trigger no necesitamos que existan registros previos, sino que al
insertar un registro en DETALLE_VENTA inmediatamente el
trigger almacenar el subtotal.

MTI Rodrigo Villegas Tllez


Taller de Bases de Datos

create trigger tu_trigger


on DETALLE_VENTA
for Insert
as
declare @varCantidad smallint, @varPrecio money, @varID
tinyint, @varIDP tinyint

select @varID = IDV, @varIDP = IDP


from inserted
select @varCantidad = cantidad
from DETALLE_VENTA
where IDV = @varID and IDP = @varIDP
select @varPrecio = Precio
from PRODUCTO
where IDP = @varIDP
update DETALLE_VENTA
set subtotal = @varCantidad * @VarPrecio
where IDV = @varID and IDP = @varIDP

Si analizamos el cdigo de la seccin de instrucciones, veremos


que es muy similar al del sp, solo que al inicio guardamos en
dos variables el id de venta y del producto, ambos recuperados
gracias a la tabla inserted. Esta tabla inserted nos brinda los
campos que se insertaron, que a diferencia del sp se obtenan
por que el usuario los brindaba al ejecutar el exec. Como
nuestro trigger no espera la ejecucin por parte de un usuario,
tiene que tomar estos ids de manera automtica, y as emplear
la misma lgica de cdigo que la empleada en el sp.

MTI Rodrigo Villegas Tllez

Anda mungkin juga menyukai