Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Funciones store proc_triggers

2,136 views

Published on

  • Be the first to comment

  • Be the first to like this

Funciones store proc_triggers

  1. 1. Base de Datos Profesor: MSC Luis Serna Jherry
  2. 2. Funciones, Procedimientos Almacenados, Disparadores Triggers Profesor: MS. Luis Serna Jherry
  3. 3. Contenido <ul><li>Que es una Function (Función). </li></ul><ul><li>Que es un Stored Procedure (Procedimiento Almacenado). </li></ul><ul><li>Que es un Trigger (Disparador ). </li></ul><ul><li>Implementar Functions. </li></ul><ul><li>Implementar Stored Procedures. </li></ul><ul><li>Implementar Triggers. </li></ul>
  4. 4. Que es una Función. <ul><li>Es una porción encapsulada de código que puede ser reutilizada por diferentes programas. </li></ul>
  5. 5. Que es un Stored Procedure. <ul><li>Un Store Procedure es un elemento de base de datos reutilizable almacenado que realiza alguna operación en la base de datos. </li></ul><ul><li>Contiene código SQL que puede, entre otras cosas, insertar, actualizar o eliminar registros. </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul>
  6. 6. Que es un Trigger <ul><li>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). </li></ul>
  7. 7. Implementando una Función <ul><li>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). </li></ul><ul><li>Un ejemplo de una función es GETDATE(), la cual retorna la fecha y hora actual del sistema. </li></ul>
  8. 8. Tipos de funciones <ul><li>Scalar Functions: Retorna un resultado con un valor escalar. </li></ul><ul><li>Table-Value Functions: Retorna el resultado en forma de tabla. </li></ul>
  9. 9. Scalar Functions <ul><li>Pueden aceptar 0 o mas parámetros de entrada. </li></ul><ul><li>Retorna solo un valor escalar. </li></ul><ul><li>Generalmente se usan como campos de columnas y en las condiciones de la cláusula Where. </li></ul><ul><li>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). </li></ul>
  10. 10. Sintaxis de una Funcion Escalar El Nombre debe ser único Puede o no tener parámetros Tipo de parámetro Opciones Tipo de dato de retorno Cuerpo
  11. 11. Sintaxis de una Funcion Escalar <ul><li>propietario: cuenta de usuario que crea la función </li></ul><ul><li>nombre: es el nombre de la función que se va a crear. </li></ul><ul><li>parametro: parámetros de entrada de la función </li></ul><ul><li>Tipo_dato: tipo de dato asociado a cada parámetro </li></ul><ul><li>Valor_por_defecto: valor asignado por defecto al parámetro </li></ul><ul><li>tipo_dato_valor_retorno: tipo de dato asociado al valor de retorno. </li></ul><ul><li>valor retorno: valor de retorno de la función </li></ul>CREATE FUNCTION [ propietario . ] nombre ( [ { @ parametro [AS] tipo_dato [ = valor_por _ defecto ] } [ , ... n ] ] ) RETURNS tipo_dato_valor_retorno AS BEGIN --cuerpo de la función, TSQL RETURN valor_retorno END
  12. 12. Ejemplo Función Escalar <ul><li>CREATE FUNCTION Calcular_Pedido (@codigo int) </li></ul><ul><li>RETURNS decimal (10,2) </li></ul><ul><li>AS </li></ul><ul><li>BEGIN </li></ul><ul><ul><li>DECLARE @precio money </li></ul></ul><ul><ul><li>DECLARE @iva float </li></ul></ul><ul><ul><li>SELECT @precio= sum(totallin) from lineas WHERE numped=@codigo </li></ul></ul><ul><ul><li>SELECT @ iva=ivaped from pedidos WHERE numped=@codigo </li></ul></ul><ul><ul><li>SET @precio= (@precio* (@iva/100))+@precio </li></ul></ul><ul><ul><li>RETURN @precio </li></ul></ul><ul><li>END </li></ul><ul><li>GO </li></ul>-- Ejecución SELECT dbo.Calcular_Pedido (1)
  13. 13. Tabled-Value Functions <ul><li>Cumplen las mismas reglas de las Scalar Functions. </li></ul><ul><li>Retorna una tabla como salida. </li></ul><ul><li>Generalmente se usan en la cláusula FROM. </li></ul>
  14. 14. Sintaxis de una Table-Value Functions Cuerpo
  15. 15. Sintaxis de una Table-Value Functions <ul><li>propietario: cuenta de usuario que crea la función </li></ul><ul><li>nombre: es el nombre de la función que se va a crear. </li></ul><ul><li>parametro: parámetros de entrada de la función </li></ul><ul><li>tipo_dato: tipo de dato asociado a cada parámetro </li></ul><ul><li>valor_por_defecto: valor asignado por defecto al parámetro </li></ul><ul><li>variable retorno: variable de retorno de la función </li></ul><ul><li>Definicion_tabla: definición de la tabla que devuelve la función </li></ul>CREATE FUNCTION [ propietario. ] nombre ([ { @ parametro [ AS ] tipo_dato [ = valor_por_defecto ] } [ ,…n]]) RETURNS @ variable_retorno TABLE < definicion_tabla > AS BEGIN --cuerpo de la función, TSQL RETURN
  16. 16. Ejemplo Función que devuelve una Tabla <ul><li>CREATE FUNCTION PedidosPorProveedor (@codigo char(4)) </li></ul><ul><li>RETURNS TABLE </li></ul><ul><li>AS </li></ul><ul><li>RETURN (SELECT count(numped) numero, nombrpro </li></ul><ul><ul><ul><li>FROM pedidos p, proveedores pr </li></ul></ul></ul><ul><ul><ul><li>WHERE pr.codigpro=@codigo and </li></ul></ul></ul><ul><ul><ul><li> p.codigpro = pr.codigpro </li></ul></ul></ul><ul><ul><ul><li>GROUP BY nombrpro ) </li></ul></ul></ul><ul><li>GO </li></ul>-- Ejecución SELECT dbo.PedidosPorProveedor('0010')
  17. 17. Funciones Deterministicas y No Deterministicas <ul><li>Funciones Deterministicas: retornan siempre para el o los mismos parámetros de entrada, el mismo valor de resultado. </li></ul><ul><ul><li>Ejemplo: el coseno de un ángulo. </li></ul></ul><ul><li>Funciones No Deterministicas: retorna diferentes valores de resultado cada vez que se les llaman. </li></ul><ul><ul><li>Ejemplo la función GetDate(). </li></ul></ul>
  18. 18. Implementando un Stored Procedure <ul><li>Es la estructura de programación más usada dentro de una base de datos. </li></ul><ul><li>Un procedimiento es un nombre asociado a proceso batch de instrucciones SQL que son mantenidas y ejecutadas en el servidor. </li></ul><ul><li>Los stored procedures pueden retornar un valor escalar, o un conjunto de valores. </li></ul><ul><li>Es la interfaz necesaria que las aplicaciones deben usar para acceder a los datos dentro de una base de datos. </li></ul>
  19. 19. Sintaxis de un Stored Procedure <ul><li>nombre: es el nombre del procedimiento que se va a crear. </li></ul><ul><li>parámetros: parámetros de entrada y salida del procedimiento </li></ul><ul><li>tipo_dato: tipo de dato asociado al parámetro. </li></ul><ul><li>valorpor_defecto: valor asignado por defecto al parámetro </li></ul><ul><li>instrucciones sql: instrucciones SQL </li></ul><ul><li>CREATE PROC [ EDURE ] nombre </li></ul><ul><ul><li>[ { @ parametros tipo_dato }[ = valor por defecto ] [ OUTPUT ]] [,...n ] </li></ul></ul><ul><ul><li>[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] </li></ul></ul><ul><ul><li>[ FOR REPLICATION ] </li></ul></ul><ul><li>AS instrucciones sql [ ...n ] </li></ul>
  20. 20. Ejemplo procedimiento sin parámetros CREATE PROCEDURE dameProveedores AS SELECT codigpro, nombrpro, direcpro, cpostpro, localpro, telefpro FROM Proveedores; Go -- Ejecución exec dameProveedores;
  21. 21. Ejemplo procedimiento con parámetros <ul><li>CREATE PROCEDURE upd_precio_articulo @ipc numeric(3,2) AS </li></ul><ul><li>BEGIN TRANSACTION </li></ul><ul><ul><li>update articulos set preunart = preunart + (preunart*@ipc/100) </li></ul></ul><ul><ul><li>where preunart is not null </li></ul></ul><ul><ul><li>if @@ERROR <> 0 GOTO on_error </li></ul></ul><ul><li>on_error: </li></ul><ul><ul><li>begin </li></ul></ul><ul><ul><li>ROLLBACK TRANSACTION </li></ul></ul><ul><ul><li>RAISERROR ('No se han modificado los precios,16,1) </li></ul></ul><ul><ul><li>end </li></ul></ul><ul><li>fin: </li></ul><ul><li>Go </li></ul>-- Ejecución exec upd_precio_articulo 3.2
  22. 22. Asignación de permisos a un Stored Procedure <ul><li>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. </li></ul><ul><li>Cuando se asigna permisos en un Stored Procedure, automáticamente se delegan permisos sobre los objetos y comandos utilizados dentro del Stored Procedure. </li></ul>
  23. 23. Implementando Triggers <ul><li>Es una implementación de Transacciones-SQL o un proceso batch que responde a un evento dentro de la base de datos. </li></ul><ul><li>Existen 2 tipos: </li></ul><ul><ul><li>Data Manipulation Languaje (DML): se ejecutan con las instrucciones INSERT, UPDATE or DELETE. </li></ul></ul><ul><ul><li>Data Definition Languaje (DDL): se ejecutan cuando se crean, alteran o borran objetos de la base de datos. </li></ul></ul>
  24. 24. DML Triggers <ul><li>Un DML trigger no puede ser ejecutado por un usuario. </li></ul><ul><li>Puede estar asociado a una tabla o una vista en un evento particular definido. </li></ul><ul><li>Modos de ejecución: </li></ul><ul><ul><li>AFTER: Se ejecuta cuando se completa exitosamente todas las validaciones y operaciones de una acción. </li></ul></ul><ul><ul><li>INSTEAD OF: Se ejecuta sobre la operación definida, sin importar si se completo toda la acción. </li></ul></ul><ul><li>No se puede crear, modificar, borrar, realizar o restaurar una base de datos mediante un trigger. </li></ul><ul><li>No puede crear alterar tablas o índices mediante un trigger. </li></ul>
  25. 25. Sintaxis de un DML Trigger
  26. 26. Sintaxis de un DML Trigger <ul><li>nombre: es el nombre del desencadenador que se va a crear. </li></ul><ul><li>tabla/vista: es el nombre de una tabla/vista sobre la que se crea. </li></ul><ul><li>campo: campo de la tabla o vista afectada por el desencadenador . </li></ul><ul><li>instrucciones sql: reglas de negocio que se requieren especificar por medio de SQL </li></ul>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 ] } }
  27. 27. Ejemplo No pedir un artículo descatalogado <ul><li>CREATE TRIGGER tr_lineas ON dbo.Lineas FOR INSERT, UPDATE </li></ul><ul><li>AS </li></ul><ul><li>BEGIN </li></ul><ul><ul><li>DECLARE @valor int </li></ul></ul><ul><ul><li>DECLARE @errmsg char(255) </li></ul></ul><ul><ul><li>SELECT @valor=count(*) FROM inserted </li></ul></ul><ul><ul><li>WHERE dbo.ArticuloDescatalogado(codigart)!=0 </li></ul></ul><ul><ul><li>IF (@valor) > 0 </li></ul></ul><ul><ul><li>BEGIN </li></ul></ul><ul><ul><ul><li>set @errmsg = 'No puede seleccionar un articulo descatalogado' </li></ul></ul></ul><ul><ul><ul><li>RAISERROR ( @errmsg,16,1) </li></ul></ul></ul><ul><ul><ul><li>GOTO on_error </li></ul></ul></ul><ul><ul><li>END </li></ul></ul><ul><ul><li>GOTO fin </li></ul></ul><ul><li>on_error: </li></ul><ul><ul><li>ROLLBACK TRANSACTION </li></ul></ul><ul><li>fin: </li></ul><ul><li>END </li></ul>
  28. 28. DDL Triggers <ul><li>El propósito principal es auditar acciones realizadas en una base de datos. </li></ul>
  29. 29. Sintaxis de un DDL Trigger
  30. 30. Sintaxis de un DDL Trigger <ul><li>nombre: es el nombre del desencadenador que se va a crear. </li></ul><ul><li>instrucciones sql: reglas de negocio que se requieren especificar por medio de SQL </li></ul><ul><li>tipo_evento: create, alter,... </li></ul><ul><li>metodo: ensamblado.clase.metodo </li></ul><ul><li><ddl_trigger_option> ::= [ ENCRYPTION ] | [ EXECUTE AS Clause ] </li></ul>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 > [ ; ] }
  31. 31. Ejemplo Notificar si el stock alcanza el mínimo establecido <ul><li>CREATE TRIGGER tr_articulos ON articulos </li></ul><ul><li>FOR UPDATE </li></ul><ul><li>AS BEGIN </li></ul><ul><ul><li>IF UPDATE (stockart) BEGIN </li></ul></ul><ul><ul><ul><li>INSERT INTO eventos (fecha, motivo) </li></ul></ul></ul><ul><ul><ul><ul><li>SELECT getdate(), 'Stock minimo alcanzado ' + codigart </li></ul></ul></ul></ul><ul><ul><ul><ul><li>FROM inserted </li></ul></ul></ul></ul><ul><ul><ul><ul><li>WHERE stockart<=stockmin </li></ul></ul></ul></ul><ul><ul><li>END </li></ul></ul><ul><li>END </li></ul>
  32. 32. Eliminación Para eliminar objetos que existan en la base de datos, Su sintaxis es: <ul><li>DROP { TABLE nombre | </li></ul><ul><ul><ul><ul><li>INDEX nombre | </li></ul></ul></ul></ul><ul><ul><ul><ul><li>VIEW nombre | </li></ul></ul></ul></ul><ul><ul><ul><ul><li>TRIGGER nombre | </li></ul></ul></ul></ul><ul><ul><ul><ul><li>RULE nombre | </li></ul></ul></ul></ul><ul><ul><ul><ul><li>DATABASE nombre | </li></ul></ul></ul></ul><ul><ul><ul><ul><li>PROCEDURE nombre | </li></ul></ul></ul></ul><ul><ul><ul><ul><li>FUNCTION nombre | </li></ul></ul></ul></ul><ul><ul><ul><ul><li>.... Otros objetos .. } </li></ul></ul></ul></ul>

×