Funciones store proc_triggers

32
Base de Datos Profesor: MSC Luis Serna Jherry

Transcript of Funciones store proc_triggers

Page 1: Funciones store proc_triggers

Base de Datos

Profesor:

MSC Luis Serna Jherry

Page 2: Funciones store proc_triggers

Funciones, Procedimientos Almacenados, Disparadores Triggers

Profesor:

MS. Luis Serna Jherry

Page 3: Funciones store proc_triggers

Contenido Que es una Function (Función). Que es un Stored Procedure

(Procedimiento Almacenado). Que es un Trigger (Disparador ). Implementar Functions. Implementar 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 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 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.

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 operación de inserción (INSERT), actualización (UPDATE) o borrado (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 sistema.

Page 8: Funciones store proc_triggers

Tipos de funciones

Scalar Functions: Retorna un resultado con un valor escalar.

Table-Value Functions: Retorna el resultado en forma de tabla.

Page 9: Funciones store proc_triggers

Scalar Functions Pueden aceptar 0 o mas parámetros de

entrada. Retorna solo un valor 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).

Page 10: Funciones store proc_triggers

El Nombre debe ser único

Puede o no tener parámetrosTipo de parámetro

Sintaxis de una Funcion Escalar

Tipo de dato de retorno

Opciones

Cuerpo

Page 11: Funciones store proc_triggers

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

Sintaxis de una Funcion Escalar

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 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 Escalar

CREATE FUNCTION Calcular_Pedido (@codigo int)RETURNS decimal (10,2)ASBEGIN

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

ENDGO

-- EjecuciónSELECT dbo.Calcular_Pedido (1)

Page 13: Funciones store proc_triggers

Tabled-Value Functions

Cumplen las mismas reglas de las Scalar Functions.

Retorna una tabla como salida. Generalmente 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, TSQLRETURN

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 variable retorno: variable de retorno de la función Definicion_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 TABLEAS RETURN (SELECT count(numped) numero, nombrpro

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

p.codigpro = pr.codigpro GROUP BY nombrpro)

GO

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

Page 17: Funciones store proc_triggers

Funciones Deterministicas y No Deterministicas

Funciones Deterministicas: retornan siempre para el o los mismos parámetros 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 función GetDate().

Page 18: Funciones store proc_triggers

Implementando un Stored 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.

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.

Page 19: Funciones store proc_triggers

Sintaxis de un Stored Procedure

nombre: es el nombre del procedimiento que se va a crear. parámetros: parámetros de entrada y salida del procedimiento tipo_dato: tipo de dato asociado al parámetro. valorpor_defecto: valor asignado por defecto al parámetro instrucciones sql: instrucciones SQL

CREATE PROC [ EDURE ] nombre[ { @parametros tipo_dato }[ = valor por defecto ] [ OUTPUT ]] [,...n ][ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ][ FOR REPLICATION ]

AS instrucciones sql [ ...n ]

Page 20: Funciones store proc_triggers

Ejemplo procedimiento sin parámetros

CREATE PROCEDURE dameProveedores ASSELECT codigpro, nombrpro, direcpro, cpostpro, localpro, telefproFROM Proveedores;Go

-- 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) where preunart is not nullif @@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

Page 22: Funciones store proc_triggers

Asignación 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, automáticamente se delegan permisos sobre los objetos y comandos utilizados dentro del Stored Procedure.

Page 23: Funciones store proc_triggers

Implementando Triggers Es una implementación 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.

Page 24: Funciones store proc_triggers

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

Page 25: Funciones store proc_triggers

Sintaxis de un DML Trigger

Page 26: Funciones store proc_triggers

Sintaxis de un DML Trigger

CREATE TRIGGER nombreON { 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

Page 27: Funciones store proc_triggers

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

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

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

ENDGOTO fin

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 de datos.

Page 29: Funciones store proc_triggers

Sintaxis de un DDL Trigger

Page 30: Funciones store proc_triggers

Sintaxis 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. 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 ]

Page 31: Funciones store proc_triggers

CREATE TRIGGER tr_articulos ON articulos FOR UPDATEAS BEGIN

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

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

END END

Ejemplo Notificar si el stock alcanza el mínimo establecido

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 |TRIGGER nombre |RULE nombre |DATABASE nombre |PROCEDURE nombre |FUNCTION nombre |.... Otros objetos .. }