2. Funciones,
Procedimientos Almacenados,
P di i Al d
Disparadores Triggers
Profesor:
MS. Luis Serna Jherry
3. Contenido
Que es una Function (Función).
ó
Q
Que es un Stored Procedure
(Procedimiento Almacenado).
Que es un Trigger (Disparador ).
Implementar Functions.
Implementar Stored Procedures
Procedures.
Implementar Triggers.
4. Que es una Función.
Es una porción encapsulada de código
que puede ser reutilizada por diferentes
programas.
5. Que es un Stored Procedure.
Un Store Procedure es un elemento de base de datos
reutilizable almacenado que realiza alguna operación en la
base de datos.
Contiene código SQL que puede, entre otras cosas, insertar,
actualizar o eliminar registros.
Los procedimientos almacenados pueden alterar la
p p
estructura de la base de datos. Por ejemplo, se puede utilizar
un procedimiento almacenado para añadir una columna de
tabla o borrar una tabla.
Un Store Procedure también puede llamar a otro Store
Procedure, así como aceptar entradas y devolver múltiples
valores al procedimiento llamado en forma de parámetros de
salida.
salida
6. Que es un Trigger
Un trigger o un disparador en una Base
de datos es un evento que se ejecuta
automáticamente cuando se cumple una
condición establecida al realizar una
operación de inserción (INSERT),
ió d i ió (INSERT)
actualización (UPDATE) o borrado
(DELETE).
(DELETE)
7. Implementando una Función
SQL Server contiene funciones ya construidas
que pueden ser utilizadas dentro de las
aplicaciones para proveer funcionalidad
común (como las funciones de fecha y hora).
Un ejemplo de una función es GETDATE(), la
cual retorna la fecha y hora actual del
sistema.
sistema
8. Tipos de funciones
Scalar Functions: Retorna un resultado
con un valor escalar.
Table-Value
Table Value Functions: Retorna el
resultado en forma de tabla.
9. Scalar Functions
Pueden aceptar 0 o mas parámetros de
entrada.
Retorna solo un valor escalar
escalar.
Generalmente se usan como campos de
columnas y en las condiciones de la cláusula
Where.
No se puede utilizar una función para cambiar
el estado de un objeto de la base de datos
(no puede insertar, modificar, eliminar datos
de una tabla. No puede borrar tablas u otros
objetos de la base de datos)
datos).
10. Sintaxis de una Funcion Escalar
El Nombre debe ser único
Puede o no tener parámetros
Tipo de parámetro
Tipo de dato
de retorno
Cuerpo
Opciones
11. Sintaxis de una Funcion Escalar
CREATE FUNCTION [ propietario. ] nombre
( [ { @parametro [AS] tipo_dato [ = valor_por_defecto ] } [ , ... n ] ] )
RETURNS tipo_dato_valor_retorno
AS
BEGIN
--cuerpo de la función, TSQL
RETURN valor_retorno
END
propietario: cuenta de usuario que crea la función
nombre: es el nombre de la función que se va a crear.
parametro: parámetros de entrada de la función
á ó
Tipo_dato: tipo de dato asociado a cada parámetro
Valor_por_defecto: valor asignado por defecto al parámetro
tipo_dato_valor_retorno:
tipo dato valor retorno: tipo de dato asociado al valor de retorno
retorno.
valor retorno: valor de retorno de la función
12. Ejemplo Función Escalar
CREATE FUNCTION Calcular_Pedido (@codigo int)
RETURNS decimal (10,2)
AS
BEGIN
DECLARE @precio money
DECLARE @iva float
SELECT @precio= sum(totallin) from lineas WHERE numped=@codigo
SELECT @iva=ivaped from pedidos WHERE numped=@codigo
SET @precio= (@precio* (@iva/100))+@precio
RETURN @precio
END
GO
-- Ej
Ejecución
ió
SELECT dbo.Calcular_Pedido (1)
13. Tabled-Value Functions
Cumplen las mismas reglas de las
Scalar Functions.
Retorna una tabla como salida.
Generalmente se usan en la cláusula
FROM.
15. Sintaxis de una Table-Value
Functions
CREATE FUNCTION [propietario.] nombre
([ { @parametro [AS] tipo_dato [ = valor_por_defecto ] } [ ,…n]])
RETURNS @variable_retorno TABLE < definicion_tabla >
AS
BEGIN
--cuerpo de la función, TSQL
RETURN
propietario: cuenta de usuario que crea la función
nombre: es el nombre de la función que se va a crear.
parametro: parámetros de entrada de la función
tipo_dato: tipo de dato asociado a cada parámetro
valor_por_defecto:
valor por defecto: valor asignado por defecto al parámetro
variable retorno: variable de retorno de la función
Definicion_tabla: definición de la tabla que devuelve la función
16. Ejemplo Función que devuelve
una Tabla
CREATE FUNCTION PedidosPorProveedor (@codigo char(4))
RETURNS TABLE
AS
RETURN (SELECT count(numped) numero, nombrpro
FROM pedidos p, proveedores pr
WHERE pr codigpro=@codigo and
pr.codigpro @codigo
p.codigpro = pr.codigpro
GROUP BY nombrpro)
GO
-- Ejecución
SELECT dbo PedidosPorProveedor('0010')
dbo.PedidosPorProveedor( 0010 )
17. Funciones Deterministicas y No
Deterministicas
Funciones Deterministicas: retornan
siempre para el o los mismos parámetros de
entrada, el mismo valor de resultado.
t d l i l d lt d
Ejemplo: el coseno de un ángulo.
Funciones No Deterministicas: retorna
diferentes valores de resultado cada vez que
se les llaman.
Ejemplo la función GetDate().
18. Implementando un Stored
p
Procedure
Es la estructura de programación más usada
dentro de una base de datos.
Un procedimiento es un nombre asociado a
proceso batch de instrucciones SQL que son
mantenidas y ejecutadas en el servidor.
servidor
Los stored procedures pueden retornar un
valor escalar, o un conjunto de valores.
, j
Es la interfaz necesaria que las aplicaciones
deben usar para acceder a los datos dentro
de
d una base de datos.
b d d t
19. Sintaxis de un Stored
Procedure
CREATE PROC [ EDURE ] nombre
[ { @parametros tipo dato }[ = valor por defecto ] [ OUTPUT ]] [,...n ]
tipo_dato [ n
[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS instrucciones sql [ ...n ]
q
nombre: es el nombre del procedimiento que se va a crear.
parámetros: parámetros de entrada y salida del procedimiento
á á d d ld d l d
tipo_dato: tipo de dato asociado al parámetro.
valorpor_defecto: valor asignado por defecto al parámetro
instrucciones sql: instrucciones SQL
20. Ejemplo procedimiento sin
parámetros
CREATE PROCEDURE dameProveedores AS
SELECT codigpro, nombrpro, direcpro, cpostpro, localpro,
gp , p , p , p p , p ,
telefpro
FROM Proveedores;
Go
-- Ejecución
exec dameProveedores;
21. Ejemplo procedimiento con
parámetros
CREATE PROCEDURE upd_precio_articulo @ipc numeric(3,2) AS
BEGIN TRANSACTION
update articulos set preunart = preunart + (preunart*@ipc/100)
p p p (p p / )
where preunart is not null
if @@ERROR <> 0 GOTO on_error
on_error:
begin
ROLLBACK TRANSACTION
RAISERROR ('No se han modificado los precios,16,1)
end
fin:
Go
-- Ejecución
exec upd_precio_articulo 3.2
22. Asignación de permisos a un
g p
Stored Procedure
Como en todos los objetos y operaciones en
la base de datos, se deben asignar
permisos para que un usuario pueda
ejecutar un stored procedure.
Cuando se asigna permisos en un Stored
Procedure, automáticamente se delegan
permisos sobre los objetos y comandos
utilizados dentro del Stored Procedure.
23. Implementando Triggers
Es una implementación de Transacciones-
SQL o un proceso batch que responde a un
evento d t d l base de datos.
t dentro de la b d d t
Existen 2 tipos:
Data Manipulation Languaje (DML): se
ejecutan con las instrucciones INSERT,
UPDATE or DELETE.
Data Definition Languaje (DDL) se ejecutan
D t D fi iti L j (DDL): j t
cuando se crean, alteran o borran objetos de la
base de datos.
24. DML Triggers
Un DML trigger no puede ser ejecutado por un
usuario.
Puede estar asociado a una tabla o una vista en un
evento particular definido.
Modos de ejecución:
AFTER: Se ejecuta cuando se completa exitosamente todas
las validaciones y operaciones de una acción.
INSTEAD OF: Se ejecuta sobre la operación definida, sin
importar si se completo toda la acción.
No
N se puede crear, modificar, borrar, realizar o
d difi b li
restaurar una base de datos mediante un trigger.
No puede crear alterar tablas o índices mediante un
trigger.
trigger
26. Sintaxis de un DML Trigger
gg
CREATE TRIGGER nombre
ON { tabla | vista }
{ {{ FOR | INSTEAD OF }{ [ INSERT] [,] [ UPDATE] [,] [ DELETE] }
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE (campo)
[ { AND | OR } UPDATE (campo) ]
[ ...n ]
}]
instrucciones_sql
instrucciones sql [ ...n ] }
n
}
nombre: es el nombre del desencadenador que se va a crear.
tabla/vista: es el nombre de una tabla/vista sobre la que se crea.
q
campo: campo de la tabla o vista afectada por el desencadenador .
instrucciones sql: reglas de negocio que se requieren especificar por
medio de SQL
27. Ejemplo No pedir un artículo
descatalogado
CREATE TRIGGER tr_lineas ON db Li
li dbo.Lineas FOR INSERT, UPDATE
INSERT
AS
BEGIN
DECLARE @valor int
DECLARE @errmsg char(255)
SELECT @valor=count(*) FROM inserted
WHERE dbo.ArticuloDescatalogado(codigart)!=0
IF (@valor) > 0
BEGIN
set @errmsg = 'No puede seleccionar un articulo descatalogado'
RAISERROR ( @errmsg,16,1)
g, , )
GOTO on_error
END
GOTO fin
on_error:
on error:
ROLLBACK TRANSACTION
fin:
END
28. DDL Triggers
El propósito principal es auditar
acciones realizadas en una base de
datos.
30. Sintaxis de un DDL Trigger
CREATE TRIGGER nombre
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger option> [ ,...n ] ]
{ FOR I AFTER } { tipo_evento } [ ,...n ]
AS { instrucciones_sql [ ; ] [ ,...n ] I EXTERNAL NAME < metodo > [ ; ] }
nombre: es el nombre del desencadenador que se va a crear.
instrucciones sql: reglas de negocio que se requieren especificar por
i t i l l d i i ifi
medio de SQL
tipo_evento: create, alter,...
metodo: ensamblado clase metodo
ensamblado.clase.metodo
<ddl_trigger_option> ::= [ ENCRYPTION ] | [ EXECUTE AS Clause ]
31. Ejemplo Notificar si el stock
alcanza el mínimo establecido
CREATE TRIGGER tr_articulos ON articulos
FOR UPDATE
AS BEGIN
IF UPDATE (stockart) BEGIN
INSERT INTO eventos (fecha, motivo)
(fecha
SELECT getdate(), 'Stock minimo alcanzado ' + codigart
FROM inserted
WHERE stockart<=stockmin
END
END
32. Eliminación
Para eliminar objetos que existan en la base de
datos, Su sintaxis es:
DROP { TABLE nombre |
INDEX nombre |
VIEW nombre |
TRIGGER nombre |
RULE nombre |
DATABASE nombre | b
PROCEDURE nombre |
FUNCTION nombre |
.... Otros objetos .. }