Base de Datos


Profesor:
MSC Luis Serna Jherry
Funciones,
   Procedimientos Almacenados,
   P    di i      Al      d
   Disparadores Triggers



Profesor:
MS. Luis Serna Jherry
Contenido
 Que es una Function (Función).
                           ó
 Q
 Que es un Stored Procedure
 (Procedimiento Almacenado).
 Que es un Trigger (Disparador ).
 Implementar Functions.
 Implementar Stored Procedures
                     Procedures.
 Implementar Triggers.
Que es una Función.
 Es una porción encapsulada de código
 que puede ser reutilizada por diferentes
 programas.
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                             p
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.
salida
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),
        ió d i       ió (INSERT)
 actualización (UPDATE) o borrado
 (DELETE).
 (DELETE)
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.
 sistema
Tipos de funciones

 Scalar Functions: Retorna un resultado
 con un valor escalar.
 Table-Value
 Table Value Functions: Retorna el
 resultado en forma de tabla.
Scalar Functions
 Pueden aceptar 0 o mas parámetros de
 entrada.
 Retorna solo un valor escalar
                       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)
                       datos).
Sintaxis de una Funcion Escalar
               El Nombre debe ser único




               Puede o no tener parámetros
                                             Tipo de parámetro



Tipo de dato
de retorno
                              Cuerpo


                                                   Opciones
Sintaxis de una Funcion Escalar
  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
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 dato valor retorno: tipo de dato asociado al valor de retorno
                                                           retorno.
valor retorno: valor de retorno de la función
Ejemplo Función Escalar
CREATE FUNCTION Calcular_Pedido (@codigo int)
RETURNS decimal (10,2)
AS
BEGIN
   DECLARE @precio money
   DECLARE @iva float
   SELECT @precio= sum(totallin) from lineas WHERE numped=@codigo
   SELECT @iva=ivaped from pedidos WHERE numped=@codigo
   SET @precio= (@precio* (@iva/100))+@precio
   RETURN @precio
END
GO

-- Ej
   Ejecución
         ió
SELECT dbo.Calcular_Pedido (1)
Tabled-Value Functions
 Cumplen las mismas reglas de las
 Scalar Functions.
 Retorna una tabla como salida.
 Generalmente se usan en la cláusula
 FROM.
Sintaxis de una Table-Value
Functions




              Cuerpo
Sintaxis de una Table-Value
    Functions
 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

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 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
Ejemplo Función que devuelve
 una Tabla
CREATE FUNCTION PedidosPorProveedor (@codigo char(4))
RETURNS TABLE
AS
RETURN (SELECT count(numped) numero, nombrpro
        FROM pedidos p, proveedores pr
        WHERE pr codigpro=@codigo and
               pr.codigpro @codigo
               p.codigpro = pr.codigpro
        GROUP BY nombrpro)
GO


-- Ejecución
SELECT dbo PedidosPorProveedor('0010')
          dbo.PedidosPorProveedor( 0010 )
Funciones Deterministicas y No
Deterministicas
 Funciones Deterministicas: retornan
 siempre para el o los mismos parámetros de
 entrada, el mismo valor de resultado.
    t d    l i        l d       lt d
  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().
Implementando un Stored
   p
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.
                                 servidor
 Los stored procedures pueden retornar un
 valor escalar, o un conjunto de valores.
               ,         j
 Es la interfaz necesaria que las aplicaciones
 deben usar para acceder a los datos dentro
 de
 d una base de datos.
          b     d d t
Sintaxis de un Stored
        Procedure

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


   nombre: es el nombre del procedimiento que se va a crear.
   parámetros: parámetros de entrada y salida del procedimiento
       á            á       d        d     ld d l      d
   tipo_dato: tipo de dato asociado al parámetro.
   valorpor_defecto: valor asignado por defecto al parámetro
   instrucciones sql: instrucciones SQL
Ejemplo procedimiento sin
  parámetros
CREATE PROCEDURE dameProveedores AS
SELECT codigpro, nombrpro, direcpro, cpostpro, localpro,
           gp ,       p ,       p , p p ,           p ,
telefpro
FROM Proveedores;
Go


-- Ejecución
exec dameProveedores;
Ejemplo procedimiento con
     parámetros
CREATE PROCEDURE upd_precio_articulo @ipc numeric(3,2) AS
BEGIN TRANSACTION
     update articulos set preunart = preunart + (preunart*@ipc/100)
       p                  p          p          (p          p /   )
     where preunart is not null
     if @@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
Asignación de permisos a un
   g          p
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.
Implementando Triggers
 Es una implementación de Transacciones-
 SQL o un proceso batch que responde a un
 evento d t d l base de datos.
      t dentro de la b   d d t
 Existen 2 tipos:
   Data Manipulation Languaje (DML): se
   ejecutan con las instrucciones INSERT,
   UPDATE or DELETE.
   Data Definition Languaje (DDL) se ejecutan
   D t D fi iti L         j (DDL):     j   t
   cuando se crean, alteran o borran objetos de la
   base de datos.
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
 N se puede crear, modificar, borrar, realizar o
           d           difi    b          li
 restaurar una base de datos mediante un trigger.
 No puede crear alterar tablas o índices mediante un
 trigger.
 trigger
Sintaxis de un DML Trigger
Sintaxis de un DML Trigger
                           gg

  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
      instrucciones sql [ ...n ] }
                             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.
                                                      q
campo: campo de la tabla o vista afectada por el desencadenador .
instrucciones sql: reglas de negocio que se requieren especificar por
medio de SQL
Ejemplo No pedir un artículo
descatalogado
CREATE TRIGGER tr_lineas ON db Li
                      li       dbo.Lineas FOR INSERT, UPDATE
                                                INSERT
AS
BEGIN
     DECLARE @valor int
     DECLARE @errmsg char(255)
     SELECT @valor=count(*) FROM inserted
     WHERE dbo.ArticuloDescatalogado(codigart)!=0
     IF (@valor) > 0
     BEGIN
         set @errmsg = 'No puede seleccionar un articulo descatalogado'
         RAISERROR ( @errmsg,16,1)
                             g, , )
         GOTO on_error
     END
     GOTO fin
on_error:
on error:
     ROLLBACK TRANSACTION
fin:
END
DDL Triggers
 El propósito principal es auditar
 acciones realizadas en una base de
 datos.
Sintaxis de un DDL Trigger
Sintaxis de un DDL Trigger

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 > [ ; ] }


nombre: es el nombre del desencadenador que se va a crear.
instrucciones sql: reglas de negocio que se requieren especificar por
i t     i       l     l d         i             i          ifi
medio de SQL
tipo_evento: create, alter,...
metodo: ensamblado clase metodo
        ensamblado.clase.metodo
<ddl_trigger_option> ::= [ ENCRYPTION ] | [ EXECUTE AS Clause ]
Ejemplo Notificar si el stock
     alcanza el mínimo establecido

CREATE TRIGGER tr_articulos ON articulos
FOR UPDATE
AS BEGIN
   IF UPDATE (stockart) BEGIN
       INSERT INTO eventos (fecha, motivo)
                             (fecha
          SELECT getdate(), 'Stock minimo alcanzado ' + codigart
          FROM inserted
          WHERE stockart<=stockmin
   END
END
Eliminación
Para 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 | b
            PROCEDURE nombre |
            FUNCTION nombre |
            .... Otros objetos .. }

Funciones store proc_triggers

  • 1.
    Base de Datos Profesor: MSCLuis Serna Jherry
  • 2.
    Funciones, Procedimientos Almacenados, P di i Al d Disparadores Triggers Profesor: MS. Luis Serna Jherry
  • 3.
    Contenido Que esuna Function (Función). ó Q Que es un Stored Procedure (Procedimiento Almacenado). Que es un Trigger (Disparador ). Implementar Functions. Implementar Stored Procedures Procedures. Implementar Triggers.
  • 4.
    Que es unaFunción. Es una porción encapsulada de código que puede ser reutilizada por diferentes programas.
  • 5.
    Que es unStored 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 p 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. salida
  • 6.
    Que es unTrigger 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), ió d i ió (INSERT) actualización (UPDATE) o borrado (DELETE). (DELETE)
  • 7.
    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. sistema
  • 8.
    Tipos de funciones Scalar Functions: Retorna un resultado con un valor escalar. Table-Value Table Value Functions: Retorna el resultado en forma de tabla.
  • 9.
    Scalar Functions Puedenaceptar 0 o mas parámetros de entrada. Retorna solo un valor escalar 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) datos).
  • 10.
    Sintaxis de unaFuncion Escalar El Nombre debe ser único Puede o no tener parámetros Tipo de parámetro Tipo de dato de retorno Cuerpo Opciones
  • 11.
    Sintaxis de unaFuncion Escalar 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 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 dato valor retorno: tipo de dato asociado al valor de retorno retorno. valor retorno: valor de retorno de la función
  • 12.
    Ejemplo Función Escalar CREATEFUNCTION Calcular_Pedido (@codigo int) RETURNS decimal (10,2) AS BEGIN DECLARE @precio money DECLARE @iva float SELECT @precio= sum(totallin) from lineas WHERE numped=@codigo SELECT @iva=ivaped from pedidos WHERE numped=@codigo SET @precio= (@precio* (@iva/100))+@precio RETURN @precio END GO -- Ej Ejecución ió SELECT dbo.Calcular_Pedido (1)
  • 13.
    Tabled-Value Functions Cumplenlas mismas reglas de las Scalar Functions. Retorna una tabla como salida. Generalmente se usan en la cláusula FROM.
  • 14.
    Sintaxis de unaTable-Value Functions Cuerpo
  • 15.
    Sintaxis de unaTable-Value Functions 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 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 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
  • 16.
    Ejemplo Función quedevuelve una Tabla CREATE FUNCTION PedidosPorProveedor (@codigo char(4)) RETURNS TABLE AS RETURN (SELECT count(numped) numero, nombrpro FROM pedidos p, proveedores pr WHERE pr codigpro=@codigo and pr.codigpro @codigo p.codigpro = pr.codigpro GROUP BY nombrpro) GO -- Ejecución SELECT dbo PedidosPorProveedor('0010') dbo.PedidosPorProveedor( 0010 )
  • 17.
    Funciones Deterministicas yNo Deterministicas Funciones Deterministicas: retornan siempre para el o los mismos parámetros de entrada, el mismo valor de resultado. t d l i l d lt d 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().
  • 18.
    Implementando un Stored p 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. servidor Los stored procedures pueden retornar un valor escalar, o un conjunto de valores. , j Es la interfaz necesaria que las aplicaciones deben usar para acceder a los datos dentro de d una base de datos. b d d t
  • 19.
    Sintaxis de unStored Procedure CREATE PROC [ EDURE ] nombre [ { @parametros tipo dato }[ = valor por defecto ] [ OUTPUT ]] [,...n ] tipo_dato [ n [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS instrucciones sql [ ...n ] q nombre: es el nombre del procedimiento que se va a crear. parámetros: parámetros de entrada y salida del procedimiento á á d d ld d l d tipo_dato: tipo de dato asociado al parámetro. valorpor_defecto: valor asignado por defecto al parámetro instrucciones sql: instrucciones SQL
  • 20.
    Ejemplo procedimiento sin parámetros CREATE PROCEDURE dameProveedores AS SELECT codigpro, nombrpro, direcpro, cpostpro, localpro, gp , p , p , p p , p , telefpro FROM Proveedores; Go -- Ejecución exec dameProveedores;
  • 21.
    Ejemplo procedimiento con parámetros CREATE PROCEDURE upd_precio_articulo @ipc numeric(3,2) AS BEGIN TRANSACTION update articulos set preunart = preunart + (preunart*@ipc/100) p p p (p p / ) where preunart is not null if @@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
  • 22.
    Asignación de permisosa un g p 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.
  • 23.
    Implementando Triggers Esuna implementación de Transacciones- SQL o un proceso batch que responde a un evento d t d l base de datos. t dentro de la b d d t Existen 2 tipos: Data Manipulation Languaje (DML): se ejecutan con las instrucciones INSERT, UPDATE or DELETE. Data Definition Languaje (DDL) se ejecutan D t D fi iti L j (DDL): j t cuando se crean, alteran o borran objetos de la base de datos.
  • 24.
    DML Triggers UnDML 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 N se puede crear, modificar, borrar, realizar o d difi b li restaurar una base de datos mediante un trigger. No puede crear alterar tablas o índices mediante un trigger. trigger
  • 25.
    Sintaxis de unDML Trigger
  • 26.
    Sintaxis de unDML Trigger gg 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 instrucciones sql [ ...n ] } 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. q campo: campo de la tabla o vista afectada por el desencadenador . instrucciones sql: reglas de negocio que se requieren especificar por medio de SQL
  • 27.
    Ejemplo No pedirun artículo descatalogado CREATE TRIGGER tr_lineas ON db Li li dbo.Lineas FOR INSERT, UPDATE INSERT AS BEGIN DECLARE @valor int DECLARE @errmsg char(255) SELECT @valor=count(*) FROM inserted WHERE dbo.ArticuloDescatalogado(codigart)!=0 IF (@valor) > 0 BEGIN set @errmsg = 'No puede seleccionar un articulo descatalogado' RAISERROR ( @errmsg,16,1) g, , ) GOTO on_error END GOTO fin on_error: on error: ROLLBACK TRANSACTION fin: END
  • 28.
    DDL Triggers Elpropósito principal es auditar acciones realizadas en una base de datos.
  • 29.
    Sintaxis de unDDL Trigger
  • 30.
    Sintaxis de unDDL Trigger 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 > [ ; ] } nombre: es el nombre del desencadenador que se va a crear. instrucciones sql: reglas de negocio que se requieren especificar por i t i l l d i i ifi medio de SQL tipo_evento: create, alter,... metodo: ensamblado clase metodo ensamblado.clase.metodo <ddl_trigger_option> ::= [ ENCRYPTION ] | [ EXECUTE AS Clause ]
  • 31.
    Ejemplo Notificar siel stock alcanza el mínimo establecido CREATE TRIGGER tr_articulos ON articulos FOR UPDATE AS BEGIN IF UPDATE (stockart) BEGIN INSERT INTO eventos (fecha, motivo) (fecha SELECT getdate(), 'Stock minimo alcanzado ' + codigart FROM inserted WHERE stockart<=stockmin END END
  • 32.
    Eliminación Para eliminar objetosque existan en la base de datos, Su sintaxis es: DROP { TABLE nombre | INDEX nombre | VIEW nombre | TRIGGER nombre | RULE nombre | DATABASE nombre | b PROCEDURE nombre | FUNCTION nombre | .... Otros objetos .. }