Base de Datos  Profesor: MSC Luis Serna Jherry
Funciones,  Procedimientos Almacenados, Disparadores  Triggers Profesor: MS. Luis  Serna Jherry
Contenido <ul><li>Que es una Function (Función). </li></ul><ul><li>Que es un Stored Procedure (Procedimiento Almacenado). ...
Que es una Función. <ul><li>Es una porción encapsulada de código que puede ser reutilizada por diferentes programas. </li>...
Que es un Stored Procedure. <ul><li>Un Store Procedure es un elemento de base de datos reutilizable almacenado que realiza...
Que es un Trigger <ul><li>Un trigger o un disparador en una Base de datos es un evento que se ejecuta automáticamente cuan...
Implementando una Función <ul><li>SQL Server contiene funciones ya construidas que pueden ser utilizadas dentro de las apl...
Tipos de funciones <ul><li>Scalar Functions: Retorna un resultado con un valor escalar. </li></ul><ul><li>Table-Value Func...
Scalar Functions <ul><li>Pueden aceptar 0 o mas parámetros de entrada. </li></ul><ul><li>Retorna solo un valor escalar. </...
Sintaxis de una Funcion Escalar El Nombre debe ser único Puede o no tener parámetros Tipo de parámetro Opciones Tipo de da...
Sintaxis de una Funcion Escalar <ul><li>propietario:  cuenta de usuario que crea la función </li></ul><ul><li>nombre:  es ...
Ejemplo Función Escalar <ul><li>CREATE FUNCTION  Calcular_Pedido (@codigo int) </li></ul><ul><li>RETURNS  decimal (10,2) <...
Tabled-Value Functions <ul><li>Cumplen las mismas reglas de las Scalar Functions. </li></ul><ul><li>Retorna una tabla como...
Sintaxis de una Table-Value Functions Cuerpo
Sintaxis de una Table-Value Functions <ul><li>propietario:  cuenta de usuario que crea la función </li></ul><ul><li>nombre...
Ejemplo Función que devuelve una Tabla <ul><li>CREATE FUNCTION  PedidosPorProveedor (@codigo char(4)) </li></ul><ul><li>RE...
Funciones Deterministicas y No Deterministicas <ul><li>Funciones Deterministicas:  retornan siempre para el o los mismos p...
Implementando un Stored Procedure <ul><li>Es la estructura de programación más usada dentro de una base de datos. </li></u...
Sintaxis  de un Stored Procedure <ul><li>nombre:  es el nombre del procedimiento que se va a crear. </li></ul><ul><li>pará...
Ejemplo procedimiento sin parámetros  CREATE PROCEDURE dameProveedores AS SELECT codigpro, nombrpro, direcpro, cpostpro, l...
Ejemplo procedimiento con parámetros  <ul><li>CREATE PROCEDURE  upd_precio_articulo @ipc numeric(3,2)  AS </li></ul><ul><l...
Asignación de permisos a un Stored Procedure <ul><li>Como en todos los objetos y operaciones en la base de datos, se deben...
Implementando Triggers <ul><li>Es una implementación de Transacciones-SQL o un proceso batch que responde a un evento dent...
DML Triggers <ul><li>Un DML trigger no puede ser ejecutado por un usuario. </li></ul><ul><li>Puede estar asociado a una ta...
Sintaxis de un DML Trigger
Sintaxis de un DML Trigger <ul><li>nombre:  es el nombre del desencadenador que se va a crear. </li></ul><ul><li>tabla/vis...
Ejemplo No pedir un artículo descatalogado <ul><li>CREATE TRIGGER  tr_lineas  ON  dbo.Lineas  FOR INSERT, UPDATE </li></ul...
DDL Triggers <ul><li>El propósito principal es auditar acciones realizadas en una base de datos. </li></ul>
Sintaxis de un DDL Trigger
Sintaxis de un DDL Trigger <ul><li>nombre:  es el nombre del desencadenador que se va a crear. </li></ul><ul><li>instrucci...
Ejemplo Notificar si el stock alcanza el mínimo establecido <ul><li>CREATE TRIGGER  tr_articulos  ON  articulos  </li></ul...
Eliminación Para eliminar objetos que existan en la base de datos,  Su  sintaxis es: <ul><li>DROP {  TABLE  nombre | </li>...
Upcoming SlideShare
Loading in...5
×

Funciones store proc_triggers

1,743
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,743
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
136
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Introducción a las Bases de Datos 26 de abril de 2011 UPC - Ingeniería de Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • Modelo Relacional 26 de abril de 2011 UPC-Ing. Sistemas
  • 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>
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×