Funciones store proc_triggers

32
Base de Datos Profesor: MSC Luis Serna Jherry MSC Luis Serna Jherry

Transcript of Funciones store proc_triggers

Page 1: Funciones store proc_triggers

Base de Datos

Profesor:MSC Luis Serna JherryMSC Luis Serna Jherry

Page 2: Funciones store proc_triggers

Funciones, P di i Al dProcedimientos Almacenados, Disparadores TriggersDisparadores Triggers

Profesor:MS. Luis Serna JherryMS. Luis Serna Jherry

Page 3: Funciones store proc_triggers

ContenidoóQue es una Function (Función).

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

Page 4: Funciones store proc_triggers

Que es una Función.

Es una porción encapsulada de código que puede ser reutilizada por diferentesque puede ser reutilizada por diferentes programas.

Page 5: Funciones store proc_triggers

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 pestructura 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 salidasalida.

Page 6: Funciones store proc_triggers

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

ió d i ió (INSERT)operación de inserción (INSERT), actualización (UPDATE) o borrado (DELETE)(DELETE).

Page 7: Funciones store proc_triggers

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 sistemasistema.

Page 8: Funciones store proc_triggers

Tipos de funciones

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

Page 9: Funciones store proc_triggers

Scalar FunctionsPueden aceptar 0 o mas parámetros de entrada.Retorna solo un valor escalarRetorna solo un valor escalar.Generalmente se usan como campos de columnas y en las condiciones de la cláusula yWhere.No se puede utilizar una función para cambiar el estado de un objeto de la base de datosel 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)objetos de la base de datos).

Page 10: Funciones store proc_triggers

Sintaxis de una Funcion EscalarEl Nombre debe ser único

Sintaxis de una Funcion Escalar

Puede o no tener parámetrosTipo de parámetro

Tipo de dato dde retorno

Opciones

Cuerpo

Opciones

Page 11: Funciones store proc_triggers

Sintaxis de una Funcion EscalarSintaxis de una Funcion Escalar

CREATE FUNCTION [ propietario. ] nombre( [ { @parametro [AS] tipo_dato [ = valor_por_defecto ] } [ , ... n ] ] )RETURNS tipo_dato_valor_retornoASASBEGIN--cuerpo de la función, TSQLRETURN valor_retornoENDEND

propietario: cuenta de usuario que crea la funciónnombre: es el nombre de la función que se va a crear.

á óparametro: parámetros de entrada de la funciónTipo_dato: tipo de dato asociado a cada parámetroValor_por_defecto: valor asignado por defecto al parámetrotipo dato valor retorno: tipo de dato asociado al valor de retornotipo_dato_valor_retorno: tipo de dato asociado al valor de retorno.valor retorno: valor de retorno de la función

Page 12: Funciones store proc_triggers

Ejemplo Función EscalarCREATE FUNCTION Calcular_Pedido (@codigo int)RETURNS decimal (10,2)ASBEGIN

DECLARE @precio moneyDECLARE @iva floatSELECT @precio= sum(totallin) from lineas WHERE numped=@codigoSELECT @precio= sum(totallin) from lineas WHERE numped=@codigoSELECT @iva=ivaped from pedidos WHERE numped=@codigoSET @precio= (@precio* (@iva/100))+@precioRETURN @precio

ENDGO

Ej ió-- EjecuciónSELECT dbo.Calcular_Pedido (1)

Page 13: Funciones store proc_triggers

Tabled-Value Functions

Cumplen las mismas reglas de las Scalar Functions.Scalar Functions.Retorna una tabla como salida.Generalmente se usan en la cláusulaGeneralmente se usan en la cláusula FROM.

Page 14: Funciones store proc_triggers

Sintaxis de una Table-Value Functions

Cuerpo

Page 15: Funciones store proc_triggers

Sintaxis de una Table-Value Functions

CREATE FUNCTION [propietario.] nombre([ { @parametro [AS] tipo_dato [ = valor_por_defecto ] } [ ,…n]])

RETURNS @variable_retorno TABLE < definicion_tabla >ASBEGIN--cuerpo de la función, TSQLRETURNRETURN

propietario: cuenta de usuario que crea la funciónnombre: es el nombre de la función que se va a crear.parametro: parámetros de entrada de la funcióntipo_dato: tipo de dato asociado a cada parámetrovalor por defecto: valor asignado por defecto al parámetrovalor_por_defecto: valor asignado por defecto al parámetrovariable retorno: variable de retorno de la funciónDefinicion_tabla: definición de la tabla que devuelve la función

Page 16: Funciones store proc_triggers

Ejemplo Función que devuelve una Tabla

CREATE FUNCTION PedidosPorProveedor (@codigo char(4))RETURNS TABLEASRETURN (SELECT count(numped) numero, nombrpro

FROM pedidos p, proveedores prWHERE pr codigpro=@codigo andWHERE pr.codigpro @codigo and

p.codigpro = pr.codigproGROUP BY nombrpro)

GO

-- EjecuciónSELECT dbo PedidosPorProveedor('0010')SELECT dbo.PedidosPorProveedor( 0010 )

Page 17: Funciones store proc_triggers

Funciones Deterministicas y No yDeterministicas

Funciones Deterministicas: retornan siempre para el o los mismos parámetros de

t d l i l d lt dentrada, el mismo valor de resultado. Ejemplo: el coseno de un ángulo.

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

Page 18: Funciones store proc_triggers

Implementando un Stored pProcedure

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 servidormantenidas y ejecutadas en el servidor.Los stored procedures pueden retornar un valor escalar, o un conjunto de valores., jEs la interfaz necesaria que las aplicaciones deben usar para acceder a los datos dentro d b d d tde una base de datos.

Page 19: Funciones store proc_triggers

Sintaxis de un Stored Procedure

CREATE PROC [ EDURE ] nombre[ { @parametros tipo dato }[ = valor por defecto ] [ OUTPUT ]] [ n ][ { @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.á á d d l d d l d

q [ ]

parámetros: parámetros de entrada y salida del procedimientotipo_dato: tipo de dato asociado al parámetro.valorpor_defecto: valor asignado por defecto al parámetroinstrucciones sql: instrucciones SQL

Page 20: Funciones store proc_triggers

Ejemplo procedimiento sin parámetros

CREATE PROCEDURE dameProveedores ASSELECT codigpro, nombrpro, direcpro, cpostpro, localpro, gp , p , p , p p , p ,telefproFROM Proveedores;GoGo

-- Ejecuciónexec dameProveedores;

Page 21: Funciones store proc_triggers

Ejemplo procedimiento con parámetros

CREATE PROCEDURE upd_precio_articulo @ipc numeric(3,2) ASBEGIN TRANSACTION

update articulos set preunart = preunart + (preunart*@ipc/100) p p p (p p / )where preunart is not nullif @@ERROR <> 0 GOTO on_error

on_error:begin

ROLLBACK TRANSACTIONRAISERROR ('No se han modificado los precios,16,1)

endendfin:Go

-- Ejecuciónexec upd_precio_articulo 3.2

Page 22: Funciones store proc_triggers

Asignación de permisos a un g pStored 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 comandospermisos sobre los objetos y comandos utilizados dentro del Stored Procedure.

Page 23: Funciones store proc_triggers

Implementando TriggersEs una implementación de Transacciones-SQL o un proceso batch que responde a un

t d t d l b d d tevento dentro de la base de datos.Existen 2 tipos:

Data Manipulation Languaje (DML): seData Manipulation Languaje (DML): se ejecutan con las instrucciones INSERT, UPDATE or DELETE.D t D fi iti L j (DDL) j tData Definition Languaje (DDL): se ejecutan cuando se crean, alteran o borran objetos de la base de datos.

Page 24: Funciones store proc_triggers

DML TriggersUn DML trigger no puede ser ejecutado por un usuario.Puede estar asociado a una tabla o una vista en unPuede estar asociado a una tabla o una vista en un evento particular definido.Modos de ejecución:

AFTER: Se ejecuta cuando se completa exitosamente todasAFTER: 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.

N d difi b liNo se puede crear, modificar, borrar, realizar o restaurar una base de datos mediante un trigger.No puede crear alterar tablas o índices mediante un triggertrigger.

Page 25: Funciones store proc_triggers

Sintaxis de un DML TriggerSintaxis de un DML Trigger

Page 26: Funciones store proc_triggers

Sintaxis de un DML Triggergg

CREATE TRIGGER nombreON { tabla | vista }{ {{ FOR | INSTEAD OF }{ [ INSERT] [,] [ UPDATE] [,] [ DELETE] }

[ NOT FOR REPLICATION ][ NOT FOR REPLICATION ]AS[ { IF UPDATE (campo)

[ { AND | OR } UPDATE (campo) ][ { AND | OR } UPDATE (campo) ][ ...n ]

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

Page 27: Funciones store proc_triggers

Ejemplo No pedir un artículo descatalogadoCREATE TRIGGER li ON db Li FOR INSERT UPDATECREATE TRIGGER tr_lineas ON dbo.Lineas FOR INSERT, UPDATEAS BEGIN

DECLARE @valor intDECLARE @valor intDECLARE @errmsg char(255)SELECT @valor=count(*) FROM insertedWHERE dbo.ArticuloDescatalogado(codigart)!=0IF (@valor) > 0IF (@valor) > 0 BEGIN

set @errmsg = 'No puede seleccionar un articulo descatalogado'RAISERROR ( @errmsg,16,1)( g, , )GOTO on_error

ENDGOTO fin

on error:on_error:ROLLBACK TRANSACTION

fin:END

Page 28: Funciones store proc_triggers

DDL Triggers

El propósito principal es auditar acciones realizadas en una base deacciones realizadas en una base de datos.

Page 29: Funciones store proc_triggers

Sintaxis de un DDL TriggerSintaxis de un DDL Trigger

Page 30: Funciones store proc_triggers

Sintaxis de un DDL TriggerSintaxis de un DDL Trigger

CREATE TRIGGER nombreON { 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.i t i l l d i i ifiinstrucciones sql: reglas de negocio que se requieren especificar por medio de SQL tipo_evento: create, alter,...metodo: ensamblado clase metodometodo: ensamblado.clase.metodo<ddl_trigger_option> ::= [ ENCRYPTION ] | [ EXECUTE AS Clause ]

Page 31: Funciones store proc_triggers

Ejemplo Notificar si el stock alcanza el mínimo establecido

CREATE TRIGGER tr_articulos ON articulos FOR UPDATEFOR UPDATEAS BEGIN

IF UPDATE (stockart) BEGININSERT INTO eventos (fecha motivo)INSERT INTO eventos (fecha, motivo)

SELECT getdate(), 'Stock minimo alcanzado ' + codigart FROM inserted WHERE stockart<=stockmin

END END

Page 32: Funciones store proc_triggers

EliminaciónPara eliminar objetos que existan en la base de datos, Su sintaxis es:

DROP { TABLE nombre |INDEX nombre |VIEW nombre |VIEW nombre |TRIGGER nombre |RULE nombre |DATABASE b |DATABASE nombre |PROCEDURE nombre |FUNCTION nombre ||.... Otros objetos .. }