funciones store proc_triggers
TRANSCRIPT
![Page 1: Funciones store proc_triggers](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/1.jpg)
Base de Datos
Profesor:MSC Luis Serna JherryMSC Luis Serna Jherry
![Page 2: Funciones store proc_triggers](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/2.jpg)
Funciones, P di i Al dProcedimientos Almacenados, Disparadores TriggersDisparadores Triggers
Profesor:MS. Luis Serna JherryMS. Luis Serna Jherry
![Page 3: Funciones store proc_triggers](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/3.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/4.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/5.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/6.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/7.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/8.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/9.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/10.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/11.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/12.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/13.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/14.jpg)
Sintaxis de una Table-Value Functions
Cuerpo
![Page 15: Funciones store proc_triggers](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/15.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/16.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/17.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/18.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/19.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/20.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/21.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/22.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/23.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/24.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/25.jpg)
Sintaxis de un DML TriggerSintaxis de un DML Trigger
![Page 26: Funciones store proc_triggers](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/26.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/27.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/28.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/29.jpg)
Sintaxis de un DDL TriggerSintaxis de un DDL Trigger
![Page 30: Funciones store proc_triggers](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/30.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/31.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052619/55620931d8b42af2128b46e6/html5/thumbnails/32.jpg)
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 .. }