Está en la página 1de 25

Programacin avanzada en SQL

Server 2008
Funciones de base de datos
Logro de la Unidad
Al terminar la unidad, los alumnos implementan
instrucciones SQL y de programacin mediante
procedimientos almacenados, funciones para optimizar las
operaciones en la base de datos desencadenadores para
optimizar las operaciones (insert, delete y update) de
registros en una base de datos.
TEMARIO
Creacin de funciones escalares
Creacin de desencadenadores
FUNCIONES
Funciones
Microsoft agreg nuevas caractersticas a su
producto SQL Server, y lo ms interesante
para los programadores del SQL es la
posibilidad de hacer funciones definidas por
el usuario.
La adicin de funciones al lenguaje del SQL
solucionara los problemas de reutilizacin del
cdigo y dar mayor flexibilidad al programar
las consultas de SQL.

Tipos de Funciones
SQL Server utiliza tres tipos de funciones:
las funciones escalares,
tabla en lnea,
funciones de tabla de MultiSentencias.
Los tres tipos de funciones aceptan
parmetros de cualquier tipo excepto el
rowversion. Las funciones escalares
devuelven un solo valor, tabla en lnea y
MultiSentencias devuelven un tipo de
dato tabla.
Funciones Escalares
Devuelven un tipo de los datos tal como int,
money, varchar, real, etc.
Pueden ser utilizadas en cualquier lugar incluso
incorporada dentro de sentencias SQL. La
sintaxis para una funcin escalar es la siguiente:
CREATE FUNCTION (nombre de la funcin)
([{ @parametro tipo]} [,..n]])
RETURNS tipo_de_dato
AS
BEGIN
Cuerpo de la Funcin
RETURN expresion_escalar
END
Alteracin y eliminacin de Funciones
Para modificar la estructura de una funcin, la sintaxis es la
siguiente:
ALTER FUNCTION (nombre de la funcin)
([{ @parametro tipo]} [,..n]])
RETURNS tipo_de_dato
AS
BEGIN
Cuerpo de la Funcin
RETURN expresion_escalar
END

Para eliminar una funcin, la sintaxis es la siguiente:
DROP FUNCTION (nombre de la funcin)

Funciones Escalares
Utilice la instruccin CREATE FUNCTION para crear funciones en la base
de datos activa.
Crea una funcion que retorne el mximo precio registrados en la tabla
tb_productos








Use sp_help para mostrar informacin
Use sp_helpText para visualizar la estructura de la funcin
Create Function dbo.MaxPrecio()
Returns decimal
As
BEGIN
Return (Select Max(PrecioUnidad) from tb_productos)
END
go
Funciones Escalares
Crea una funcion donde ingrese el ID del empleado, si existe visualice el
nombre y apellido del empleado
create Function dbo.DatosEmpleado(@id int)
Returns varchar(40)
As
BEGIN
Declare @nombre varchar(40)
if exists(Select * from tb_empleados Where idempleado=@id)
Set @nombre=(Select Nombre+Apellidos
From tb_empleados Where idempleado=@id)
else
Set @nombre='No existe el codigo'

Return @nombre
END

Funciones de Table en Lnea
Devuelven la salida de una declaracin SELECT.
La salida se puede utilizar adentro de joins o querys
como si fuera un tabla de estndar.
La sintaxis para una funcin de tabla en lnea es:
CREATE FUNCTION (nombre de la funcin)
([{ @parametro tipo]} [,..n]])
RETURNS Table
AS
BEGIN
Cuerpo de la Funcin
RETURN (Sentencia Select)
END
Funciones de Tabla en Lnea
Crea una funcin donde ingrese el ID del cliente, visualice el nombre,
direccion y telefono

Create Function dbo.DatosCliente(@id varchar(5))
Returns Table
As
Return(Select NombreCia, Direccion, Telefono
From tb_clientes Where idcliente=@id)
Go

--ejecutando la funcin
Select *
from dbo.DatosCliente('ANATR')
Go




Funciones de Tabla en Lnea
Crea una funcin donde ingrese un pais (nombre), visualice el nombre,
direccion y telefono de los clientes

create Function dbo.ClientePais(@pais varchar(40))
Returns Table
As
Return(Select NombreCia, Direccion, Telefono From tb_clientes
Where idpais= (Select idpais From tb_paises
Where nombrePais=@pais))
go

--ejecutando la funcin
Select * from dbo.ClientePais('Peru')
go



TRIGGER
o
DESENCADENANTES
Trigger
Llamado tambin Desencadenante es una
clase especial de procedimiento almacenado
que se ejecuta automticamente cuando se
produce un evento en el servidor de bases de
datos.

Tipos de Triggers
Trigger DML, se ejecutan cuando un usuario intenta
modificar datos mediante un evento de lenguaje de
manipulacin de datos (DML). Los eventos DML son
instrucciones INSERT, UPDATE o DELETE de una tabla o
vista.
Trigger DDL, se ejecutan en respuesta a una variedad de
eventos de lenguaje de definicin de datos (DDL). Estos
eventos corresponden principalmente a instrucciones
CREATE, ALTER y DROP de Transact-SQL, y a determinados
procedimientos almacenados del sistema que ejecutan
operaciones de tipo DDL.

Triggers DML
Los trigger DML se ejecutan cuando un usuario intenta
modificar datos mediante un evento de lenguaje de
manipulacin de datos (DML).
Los eventos DML son instrucciones INSERT, UPDATE o
DELETE de una tabla o vista.
La sintaxis para definir un Trigger es:
CREATE TRIGGER (nombre de Trigger)
ON (nombre de la Tabla)
FOR <INSERT, UPDATE, DELETE>
AS
BEGIN
Sentencia
END
Alteracin y Eliminacin de
Triggers
La sintaxis para modificar la estructura de un Trigger es:
ALTER TRIGGER (nombre de Trigger)
ON (nombre de la Tabla)
FOR <INSERT, UPDATE, DELETE>
AS
BEGIN
Sentencia
END
La sintaxis para eliminar un Trigger es:
DROP TRIGGER (nombre de Trigger)
Alteracin y Eliminacin de
Triggers
La sintaxis para modificar la estructura de un Trigger es:
ALTER TRIGGER (nombre de Trigger)
ON (nombre de la Tabla)
FOR <INSERT, UPDATE, DELETE>
AS
BEGIN
Sentencia
END
La sintaxis para eliminar un Trigger es:
DROP TRIGGER (nombre de Trigger)
Triggers de Insercin
Cuando se inserta una nueva fila en una tabla, SQL Server
inserta los nuevos valores en la tabla INSERTED el cual es
una tabla del sistema.
La tabla INSERTED toma la misma estructura del cual se
origin el trigger, de tal manera que se pueda verificar los
datos y ante un error podra revertirse los cambios.
Triggers de Insercin
Cree un trigger que permita insertar los datos de un
Cliente siempre que el nombre del cliente sea nico
CREATE TRIGGER TX_CLIENTE_INSERTA
ON tb_Clientes
FOR INSERT
AS
IF (Select count(*) From INSERTED, tb_Clientes
Where INSERTED.NombreCia = Tb_clientes.NombreCia) > 0
Begin
Rollback transaction
raiserror('El Nombre del Clientes existe en la base de datos',14,1)
End
Else
raiserror('El Usuario fue ingresado en la base de datos',14,1)
go
Triggers de Eliminacin
Cuando se elimina una fila de una tabla, SQL Server inserta
los valores que fueron eliminados en la tabla DELETED el
cual es una tabla del sistema.
Esta tabla toma la misma estructura del cual se origino el
trigger, de tal manera que se pueda verificar los datos y
ante un error podra revertirse los cambios.
Triggers de Eliminacin
Cree un trigger que permita eliminar un registro de
productos siempre que las UnidadesEnExistencia sea igual
a cero

CREATE TRIGGER TX_PRODUCTO_ELIMINA
ON TB_PRODUCTOS
FOR Delete
AS
IF (select UnidadesEnExistencia from deleted ) > 0
Begin
Rollback transaction
Raiserror('Tenemos Stock en el Producto',14,1)
End
go
Triggers de Actualizacin
Cuando se actualiza una fila de una tabla, SQL Server
inserta los valores que antiguos en la tabla DELETED y los
nuevos valores los inserta en la tabla INSERTED.
Usando estas dos tablas se podr verificar los datos y ante
un error podran revertirse los cambios.
Triggers de Actualizacin
Cree un trigger que permita actualizar el valor de las
EnExistencia de la tabla productos, siempre que el valor a
actualizar sea mayor o igual a cero
CREATE TRIGGER TX_PRODUCTO_ACTUALIZA
ON TB_PRODUCTOS
FOR Update
AS
IF (select UnidadesEnExistencia from Inserted) < 0
Begin
declare @st varchar(5)
Set @st=(Select unidadesEnExistencia from deleted)
Rollback transaction
Print('Error de Stock, cantidad:'+ @st)
End
FIN de la Sesin

También podría gustarte