You are on page 1of 2

STORED PROCEDURES & TRIGGERS Presentado por: Josué Granados * Emmanuel Mejía * Fátima Orantes * Ariel Torres * Danilo Santos

Fundamento Teórico
Un procedimiento almacenado es un
objeto perteneciente a una base de datos,
que contiene un conjunto de instrucciones
SQL, tanto de consulta, como de
manipulación de datos, como de control
de la secuencia del programa; que están
asociados a un nombre y que son
ejecutados en conjunto.
Puede contener parámetros tanto de
entrada como de salida (parámetros
pasados por referencia), así como devolver
un valor de retorno.
Su sintaxis básica es:
Create procedure <nombre_proc>
<@lista_ parámetros>
As
Begin
<Instrucciones de procedimiento>
End
La sintaxis de la llamada a un
procedimiento almacenado, depende de
cómo se halla creado dicho procedimiento;
sin embargo, generalmente es la siguiente:
Exec <nombre_proc>
Exec <nombre_proc><@ista_parámetros>

Ejemplo Proc sin parámetros

-- Verificar precios de libro
CREATE PROCEDURE VENTA_POR_LIBRO
AS
BEGIN
SELECT TITULO,PRECIO*CANTIDAD AS
[COSTO DE VENTA] FROM
LIBRO,DETALLE_FACTURA,FACTURA
WHERE
LIBRO.ID=DETALLE_FACTURA.ID_LIBRO
AND
DETALLE_FACTURA.ID_FACTURA=FACTUR
A.ID
GROUP BY
LIBRO.ID,TITULO,PRECIO*CANTIDAD
END

-- Ejecutar procedimientos
EXEC VENTA_POR_LIBRO







Ejemplo Proc con parámetros

-- Insertar registro a tablas validando datos
CREATE PROCEDURE INSERT_EDITORIAL
@ID INT, @NOMBRE NVARCHAR(50), @PAIS
NVARCHAR(50)
AS
IF NOT EXISTS(SELECT ID FROM EDITORIAL
WHERE ID=@ID)
BEGIN
IF (SELECT COUNT(*) FROM EDITORIAL
WHERE NOMBRE=@NOMBRE AND
PAIS=@PAIS)=0
BEGIN
INSERT INTO EDITORIAL(ID, NOMBRE, PAIS)
VALUES(@ID, @NOMBRE, @PAIS)
END
ELSE
BEGIN
PRINT '¡ERROR, NO SE PUEDE REGISTRAR EL
EDITORIAL '+@NOMBRE+ ' DEBIDO A QUE
EXISTE EL NOMBRE DE LA EDITORIAL EN EL
PAIS '+@PAIS
END
END
ELSE
BEGIN
PRINT '¡ERROR, EL ID QUE ESTÁ TRATANDO
DE INGRESAR YA EXISTE!'
END
-- Ejecutar procedimiento
EXEC INSERT_EDITORIAL 1, 'OMEGA 2000',
'COLOMBIA'
PROCEDIMIENTOS ALMACENADOS



STORED PROCEDURES & TRIGGERS Presentado por: Josué Granados * Emmanuel Mejía * Fátima Orantes * Ariel Torres * Danilo Santos
Fundamento Teórico
Un desencadenador es una clase especial
de procedimiento almacenado que se
ejecuta automáticamente cuando se
produce un evento en el servidor de bases
de datos.
SQL Server proporciona los siguientes tipos
de disparadores:
 Trigger DML, se ejecutan cuando
se intenta ejecutar acciones de
lenguaje de manipulación de datos
(insert, update y delete)

 Trigger DDL, se ejecutan en
respuesta a una variedad de
eventos de lenguaje de definición
de datos
(create, alter y drop)
La sintaxis básica para crear un disparador
es:
Create trigger <nombre_trigger>
On <nombre_base>
For <DROP_TABLE, ALTER_TABLE | INSERT,
UDATE, DELETE>
As
Begin
<Instrucciones de trigger>
End
Ejemplo Trigger DML

-- Actualizar existencias
CREATE TRIGGER ACTUALIZAR_EXISTENCIA
ON DETALLE_FACTURA
FOR INSERT
AS
DECLARE @ID_LIBRO INT
DECLARE @CANTIDAD_SOLICITADA INT
DECLARE @CANTIDAD_EXISTENTE INT
SET @ID_LIBRO = (SELECT ID_LIBRO FROM
INSERTED)
SET @CANTIDAD_SOLICITADA = (SELECT
CANTIDAD FROM INSERTED)
SET @CANTIDAD_EXISTENTE= (SELECT
STOCK FROM LIBRO WHERE
ID=@ID_LIBRO)
IF (@CANTIDAD_EXISTENTE <
@CANTIDAD_SOLICITADA )
BEGIN
RAISERROR ('LO SIENTO LA CANTIDAD
SOLICITADA ES MAYOR A LA
EXISTENCIA,INTENTE DE NUEVO ',16,1)
END
ELSE
BEGIN
UPDATE LIBRO SET STOCK
=(@CANTIDAD_EXISTENTE-
@CANTIDAD_SOLICITADA )
WHERE ID=@ID_LIBRO
END

Ejemplo Trigger DDL

-- Denegar borrado y alteración -- de tablas
CREATE TRIGGER BORRAR_ACTUALIZAR
ON DATABASE FOR DROP_TABLE,
ALTER_TABLE
AS
BEGIN
RAISERROR('NO ESTA PERMITIDO
ACTUALIZAR O BORRAR TABLAS', 16, 1);
ROLLBACK TRANSACTION
END


DESENCADENADORES