Funciones store proc_triggers
-
Upload
luis-jherry -
Category
Education
-
view
1.631 -
download
0
Transcript of Funciones store proc_triggers
![Page 1: Funciones store proc_triggers](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/1.jpg)
Base de Datos
Profesor:
MSC Luis Serna Jherry
![Page 2: Funciones store proc_triggers](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/2.jpg)
Funciones, Procedimientos Almacenados, Disparadores Triggers
Profesor:
MS. Luis Serna Jherry
![Page 3: Funciones store proc_triggers](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/3.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/4.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/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 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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/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 operación de inserción (INSERT), actualización (UPDATE) o borrado (DELETE).
![Page 7: Funciones store proc_triggers](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/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 sistema.
![Page 8: Funciones store proc_triggers](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/8.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/9.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/10.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/11.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/12.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/13.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/14.jpg)
Sintaxis de una Table-Value Functions
Cuerpo
![Page 15: Funciones store proc_triggers](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/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, 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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/16.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/17.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/18.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/19.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/20.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/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) 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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/22.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/23.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/24.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/25.jpg)
Sintaxis de un DML Trigger
![Page 26: Funciones store proc_triggers](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/26.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/27.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/28.jpg)
DDL Triggers
El propósito principal es auditar acciones realizadas en una base de datos.
![Page 29: Funciones store proc_triggers](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/29.jpg)
Sintaxis de un DDL Trigger
![Page 30: Funciones store proc_triggers](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/30.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/html5/thumbnails/31.jpg)
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](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5562087cd8b42a00138b467b/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 |TRIGGER nombre |RULE nombre |DATABASE nombre |PROCEDURE nombre |FUNCTION nombre |.... Otros objetos .. }