Sei sulla pagina 1di 32

Base de

Datos
Profesor:
MSC Luis Serna Jherry

Funciones,
Procedimientos
Almacenados,
Disparadores Triggers

Profesor:
MS. Luis Serna Jherry

Contenido

Que es una Function (Funcin).


Que es un Stored Procedure
(Procedimiento Almacenado).
Que es un Trigger (Disparador ).
Implementar Functions.
Implementar Stored Procedures.
Implementar Triggers.

Que es una Funcin.

Es una porcin encapsulada de


cdigo que puede ser reutilizada
por diferentes programas.

Que es un Stored
Procedure.

Un Store Procedure es un elemento de base de datos


reutilizable almacenado que realiza alguna operacin en la
base de datos.
Contiene cdigo SQL que puede, entre otras cosas, insertar,
actualizar o eliminar registros.
Los procedimientos almacenados pueden alterar la
estructura de la base de datos. Por ejemplo, se puede utilizar
un procedimiento almacenado para aadir una columna de
tabla o borrar una tabla.
Un Store Procedure tambin puede llamar a otro Store
Procedure, as como aceptar entradas y devolver mltiples
valores al procedimiento llamado en forma de parmetros
de salida.

Que es un Trigger

Un trigger o un disparador en una


Base de datos es un evento que se
ejecuta automticamente cuando se
cumple una condicin establecida al
realizar una operacin de insercin
(INSERT), actualizacin (UPDATE) o
borrado (DELETE).

Implementando una
Funcin

SQL Server contiene funciones ya


construidas que pueden ser utilizadas
dentro de las aplicaciones para proveer
funcionalidad comn (como las
funciones de fecha y hora).
Un ejemplo de una funcin es
GETDATE(), la cual retorna la fecha y
hora actual del sistema.

Tipos de funciones

Scalar Functions: Retorna un


resultado con un valor escalar.
Table-Value Functions: Retorna el
resultado en forma de tabla.

Scalar Functions

Pueden aceptar 0 o mas parmetros de


entrada.
Retorna solo un valor escalar.
Generalmente se usan como campos de
columnas y en las condiciones de la clusula
Where.
No se puede utilizar una funcin 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).

Sintaxis de una Funcion


Escalar
El Nombre debe ser nico

Puede o no tener parmetros


Tipo de parmetro

Tipo de dato
de retorno

Cuerpo
Opciones

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 funcin, TSQL
RETURN valor_retorno
END
propietario: cuenta de usuario que crea la funcin
nombre: es el nombre de la funcin que se va a crear.
parametro: parmetros de entrada de la funcin
Tipo_dato: tipo de dato asociado a cada parmetro
Valor_por_defecto: valor asignado por defecto al parmetro
tipo_dato_valor_retorno: tipo de dato asociado al valor de
retorno.
valor retorno: valor de retorno de la funcin

Ejemplo Funcin 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=@co
SELECT @iva=ivaped from pedidos WHERE numped=@codigo
SET @precio= (@precio* (@iva/100))+@precio
RETURN @precio
END
GO
-- Ejecucin
SELECT dbo.Calcular_Pedido (1)

Tabled-Value Functions

Cumplen las mismas reglas de las


Scalar Functions.
Retorna una tabla como salida.
Generalmente se usan en la
clusula FROM.

Sintaxis de una Table-Value


Functions

Cuerpo

Sintaxis de una TableValue Functions


CREATE FUNCTION [propietario.] nombre
([ { @parametro [AS] tipo_dato [ = valor_por_defecto ] } [ ,
n]])
RETURNS @variable_retorno TABLE < definicion_tabla >
AS
BEGIN
--cuerpo de la funcin, TSQL
RETURN

propietario: cuenta de usuario que crea la funcin


nombre: es el nombre de la funcin que se va a crear.
parametro: parmetros de entrada de la funcin
tipo_dato: tipo de dato asociado a cada parmetro
valor_por_defecto: valor asignado por defecto al parmetro
variable retorno: variable de retorno de la funcin
Definicion_tabla: definicin de la tabla que devuelve la funcin

Ejemplo Funcin 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
p.codigpro = pr.codigpro
GROUP BY nombrpro)
GO

-- Ejecucin
SELECT dbo.PedidosPorProveedor('0010')

Funciones Deterministicas y
No Deterministicas

Funciones Deterministicas: retornan


siempre para el o los mismos
parmetros de entrada, el mismo valor
de resultado.
Ejemplo: el coseno de un ngulo.

Funciones No Deterministicas:
retorna diferentes valores de resultado
cada vez que se les llaman.
Ejemplo la funcin GetDate().

Implementando un Stored
Procedure

Es la estructura de programacin ms 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.
Los stored procedures pueden retornar un
valor escalar, o un conjunto de valores.
Es la interfaz necesaria que las aplicaciones
deben usar para acceder a los datos dentro
de una base de datos.

Sintaxis de un Stored
Procedure
CREATE PROC [ EDURE ] nombre
[ { @parametros tipo_dato }[ = valor por defecto ] [ OUTPUT ]]
[,...n ]
[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE ,
ENCRYPTION } ]
[ FOR REPLICATION ]
AS instrucciones sql [ ...n ]

nombre: es el nombre del procedimiento que se va a crear.


parmetros: parmetros de entrada y salida del procedimiento
tipo_dato: tipo de dato asociado al parmetro.
valorpor_defecto: valor asignado por defecto al parmetro
instrucciones sql: instrucciones SQL

Ejemplo procedimiento sin


parmetros
CREATE PROCEDURE dameProveedores AS
SELECT codigpro, nombrpro, direcpro, cpostpro,
localpro, telefpro
FROM Proveedores;
Go

-- Ejecucin
exec dameProveedores;

Ejemplo procedimiento
con parmetros
CREATE PROCEDURE upd_precio_articulo @ipc numeric(3,2)
AS
BEGIN TRANSACTION
update articulos set preunart = preunart +
(preunart*@ipc/100)
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

-- Ejecucin
exec upd_precio_articulo 3.2

Asignacin de permisos a un
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, automticamente se delegan
permisos sobre los objetos y comandos
utilizados dentro del Stored Procedure.

Implementando Triggers

Es una implementacin de
Transacciones-SQL o un proceso batch
que responde a un evento dentro de la
base de datos.
Existen 2 tipos:

Data Manipulation Languaje (DML): se


ejecutan con las instrucciones INSERT,
UPDATE or DELETE.
Data Definition Languaje (DDL): se
ejecutan cuando se crean, alteran o borran
objetos de la base de datos.

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 ejecucin:

AFTER: Se ejecuta cuando se completa exitosamente

todas las validaciones y operaciones de una accin.


INSTEAD OF: Se ejecuta sobre la operacin definida, sin
importar si se completo toda la accin.

No se puede crear, modificar, borrar, realizar o


restaurar una base de datos mediante un trigger.
No puede crear alterar tablas o ndices mediante
un trigger.

Sintaxis de un DML Trigger

Sintaxis de un DML Trigger

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 [ ...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.
campo: campo de la tabla o vista afectada por el desencadenador .
instrucciones sql: reglas de negocio que se requieren especificar
por medio de SQL

Ejemplo No pedir un
artculo descatalogado

CREATE TRIGGER tr_lineas ON dbo.Lineas FOR INSERT,


UPDATE
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)
GOTO on_error
END
GOTO fin
on_error:
ROLLBACK TRANSACTION
fin:

DDL Triggers

El propsito principal es auditar


acciones realizadas en una base de
datos.

Sintaxis de un DDL Trigger

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 medio de SQL
tipo_evento: create, alter,...
metodo: ensamblado.clase.metodo
<ddl_trigger_option> ::= [ ENCRYPTION ] | [ EXECUTE AS Clause ]

Ejemplo Notificar si el
stock alcanza el mnimo
establecido
CREATE TRIGGER tr_articulos ON articulos
FOR UPDATE
AS BEGIN
IF UPDATE (stockart) BEGIN
INSERT INTO eventos (fecha, motivo)
SELECT getdate(), 'Stock minimo alcanzado ' +
codigart
FROM inserted
WHERE stockart<=stockmin
END
END

Eliminacin
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 |
PROCEDURE nombre |
FUNCTION nombre |
.... Otros objetos .. }