Formato para prácticas de laboratorio CARRERA PLAN DE ESTUDIO CLAVE IGNATURA NOMBRE DE LA IGNATURA LSC 2009-2 12001 Administración de Bases de Datos PRÁCTICA No. 6 LABORATORIO DE NOMBRE DE LA PRÁCTICA Bases de Datos Distribuidas DURACIÓN (HORA) Procedimientos Almacenados y funciones. 2 1. INTRODUCCIÓN Un procedimiento es un programa dentro de la base de datos que ejecuta una acción o conjunto de acciones específicas. Un procedimiento tiene un nombre, un conjunto de parámetros (opcional) y un bloque de código. En Transact SQL los procedimientos almacenados pueden devolver valores (numérico entero) o conjuntos de resultados. 2. OBJETIVO (COMPETENCIA) El alumno asimilará los conceptos y procedimientos asociados a los procedimientos almacenados y funciones para su comprensión y entendimiento, aplicando posteriormente el conocimiento adquirido en planteamientos y aplicación de procedimientos almacenados y funciones. Formuló Lissethe G. Lamadrid López y estudiantes de lsc ciclo 2013-1, revisión 2014-1 Revisó Josefina Mariscal Camacho Aprobó Autorizó David I. Rosas Almeida Nombre y Firma del Maestro Nombre y Firma del Responsable de Programa Educativo Nombre y Firma del Responsable de gestión de Calidad Nombre y Firma del Director / Representante de la Dirección Página 1 de 8 Revisión 1.
3. FUNDAMENTO Conceptos básicos Procedimiento almacenado Los procedimientos almacenados pueden recibir y devolver información; para ello se emplean parámetros, de entrada y salida, respectivamente. Veamos los primeros. Los parámetros de entrada posibilitan pasar información a un procedimiento. Para que un procedimiento almacenado admita parámetros de entrada se deben declarar variables como parámetros al crearlo. Sintaxis CREATE PROCEDURE dbo.storedprocedure1 /* ( @parameter1 datatype = default value, @parameter2 datatype OUTPUT ) */ /* SET NOCOUNT ON */ RETURN Funciones SQL Server proporciona al usuario la posibilidad de definir sus propias funciones, conocida como UDF (user defined functions). Exisiten tres tipos de funciones. Estas son: Funciones escalares. Funciones en línea. Funciones en línea de multiples sentencias Sintaxis CREATE FUNCTION dbo.function1 ( /* @parameter1 datatype = default value, @parameter2 datatype */ ) Página 2 de 8 Revisión 1.
RETURNS /* datatype */ BEGIN /* sql statement... */ RETURN /* value */ END 4. PROCEDIMIENTO (DESCRIPCIÓN) A) EQUIPO NECESARIO MATERIAL DE APOYO Equipo de cómputo SQL Server 2012 B) DESARROLLO DE LA PRÁCTICA CREACIÓN DE PROCEDIMIENTOS ALMACENADOS a) Incrementar Sueldo de los Empleados con mas de 3 Años de Servicio a un 20% mas CREATE PROCEDURE USP_EMPLEADOS_AUMENTARSUELDO DECLARE @FECHA DATETIME DECLARE @DIF TINYINT SELECT @FECHA =FECHAINGRESO FROM EMPLEADOS SET @DIF = YEAR(GETDATE())-YEAR(@FECHA) IF MONTH(GETDATE()) < MONTH(@FECHA) SET @DIF = @DIF - 1 IF MONTH(GETDATE())= MONTH(@FECHA) AND DAY(GETDATE()) < DAY(@FECHA) SET @DIF = @DIF - 1 IF (@DIF >= 3) UPDATE EMPLEADOS SET SUELDO = (SUELDO + (SUELDO * 0.20)) --EJECUTAR SOLO UNA VEZ EXECUTE USP_EMPLEADOS_AUMENTARSUELDO --VERIFICANDO SELECT * FROM EMPLEADOS Página 3 de 8 Revisión 1.
a) Procedimiento que Permite Almacenar valores nulos en los Campos SUELDO Y FECHADEINGRESO CREATE PROCEDURE USP_EMPLEADOSINGRESAR @DOCUMENTO VARCHAR(30), @APELLIDO VARCHAR(30), @NOMBRE VARCHAR(30), @SECCION VARCHAR(20) BEGIN INSERT INTO EMPLEADOS VALUES (@DOCUMENTO,@APELLIDO,@NOMBRE,@SECCION,NULL,NULL) END DEMO EXECUTE USP_EMPLEADOSINGRESAR '22777889','DURAND','DANY','SECRETARIA' VERIFICANDO SELECT * FROM EMPLEADOS a) Procedimiento que Permite Realizar BACKUP a la Base de Datos EMPRESA CREATE PROCEDURE COPIADATABE BACKUP DATABE EMPRESA TODISK = 'F:\\BACKUP.bak' WITHINIT --DEMO EXECUTE COPIADATABE CREACIÓN DE CONSULT Y FUNCIONES a)cree la base de datos proporcionada a continuacion y siga las indicaciones. CREATE DATABE BANCO CREATE TABLE CLIENTE (IDCLIENTE VARCHAR(5)PRIMARY KEY, APELLIDOS VARCHAR(30), NOMBRES VARCHAR(30)) Página 4 de 8 Revisión 1.
CREATE TABLE CUENTA (IDCLIENTE VARCHAR(5), IDCUENTA VARCHAR(20)PRIMARY KEY, SALDO FLOAT, DIVISA VARCHAR(20)) CREATE TABLE MOVIMIENTO (IDCUENTA VARCHAR(5), IDMOVIMIENTO VARCHAR(5)PRIMARY KEY, TIPO VARCHAR(2), MONTO FLOAT, FECHA DATETIME) EL DATETIME SE TIENE QUE INGRESAR DE MANERA MANUAL, DE PREFERENCIAL LA TABLA CREATE TABLE MOROSO (IDMOROSO VARCHAR(5)PRIMARY KEY, FECHACLIENTE DATETIME, MENSAJE VARCHAR(20), ) ALTER TABLE CUENTA ADD FOREIGN KEY(IDCLIENTE)REFERENCES CLIENTE ALTER TABLE MOVIMIENTO ADD FOREIGN KEY(IDCUENTA)REFERENCES CUENTA INGRESAR REGISTROS INSERT INTO CLIENTE VALUES ('01','AMEZQUITA','JUAN') INSERT INTO CLIENTE VALUES ('02','ACOSTA','ANA') INSERT INTO CLIENTE VALUES ('03','PEREZ','DANIELA') INSERT INTO CLIENTE VALUES ('04','HERRERA','CAROLINA') INSERT INTO CUENTA VALUES ('01','01',100.50,'PESO') INSERT INTO CUENTA VALUES ('02','02',500,'SIN CUENTA') INSERT INTO CUENTA VALUES ('03','03',300,'EURO') INSERT INTO MOVIMIENTO VALUES ('01','01','DEPOSITO',50,'09/04/2014') INSERT INTO MOVIMIENTO VALUES ('02','02','RETIRO',100,'08/04/2014') INSERT INTO MOVIMIENTO VALUES ('03','03','DEPOSITO',200,'07/04/2014') Página 5 de 8 Revisión 1.
INSERT INTO MOROSO VALUES ( 01, 08/04/2014, ES MOROSO ) VERIFICAR EL ORDENAMIENTO DE L INSERCIONES DE L TABL. CONSULT A) Consultar las Cuentas de los clientes cuyo Apellido empiece por A SELECT B.APELLIDOS + ',' + B.NOMBRES CLIENTE, A.IDCUENTA, A.SALDO FROM CUENTA A INNER JOIN CLIENTE B ON A.IDCLIENTE = B.IDCLIENTE WHERE B.APELLIDOS LIKE 'A%' B) Consultar todo los Movimientos de las Cuentas en Divisa EURO del Cliente cuyo Apellido es PEREZ SELECT A.IDCUENTA, C.FECHA, C.MONTO, TIPO = CE C.TIPO WHEN 'D' THEN' DEPOSITO' WHEN 'R' THEN 'RETIRO' WHEN 'T' THEN' TRANSFERENCIA' END FROM CUENTA A INNER JOIN CLIENTE B ON A.IDCLIENTE = B.IDCLIENTE INNER JOIN MOVIMIENTO C ON A.IDCUENTA = C.IDCUENTA WHERE A.DIVISA = 'EUROS' AND B.APELLIDOS = 'PEREZ' ORDER BY C.FECHA DESC C) Consultar todo los movimientos de las Cuentas del Cliente PEREZ en EUROS (Aunque tenga cuentas en otras divisas) Ordenados por el numero de Cuenta SELECT C.NOMBRES, C.APELLIDOS, CU.IDCUENTA, CU.SALDO, CU.DIVISA, M.IDMOVIMIENTO, M.MONTO, M.TIPO FROM CLIENTE C INNER JOIN CUENTA CU ON C.IDCLIENTE = CU.IDCLIENTE INNER JOIN MOVIMIENTO M ON CU.IDCUENTA = M.IDCUENTA WHERE C.APELLIDOS = 'PEREZ' ORDER BY CU.IDCUENTA D) Consultar las Divisas que no tengan ninguna Cuenta Asociada Página 6 de 8 Revisión 1.
SELECT B.IDCLIENTE, B.APELLIDOS, B.NOMBRES, A.IDCUENTA, A.DIVISA FROM CUENTA A INNER JOIN CLIENTE B ON A.IDCLIENTE = B.IDCLIENTE INNER JOIN MOVIMIENTO C ON A.IDCUENTA = A.IDCUENTA WHERE A.DIVISA = 'SIN CUENTA' E) Consultar los Movimientos de Ingreso de PEREZ y los Movimientos de Traspaso de RODRIGUEZ SELECT A.IDCUENTA, C.FECHA, C.MONTO, C.TIPO FROM CUENTA A INNER JOIN CLIENTE B ON A.IDCLIENTE = B.IDCLIENTE INNER JOIN MOVIMIENTO C ON A.IDCUENTA = A.IDCUENTA WHERE C.TIPO = 'DEPOSITO' AND B.APELLIDOS = 'PEREZ' OR C.TIPO = 'TRANSACCIONES' AND B.APELLIDOS = 'RODRIGUEZ' ORDER BY C.FECHA DESC F) Crear una funcion que retorne si un cliente es moroso CREATE FUNCTION MOROSO(@FECHAPA DATETIME) RETURNS VARCHAR(20) BEGIN DECLARE @FECHACLIENTE DATETIME DECLARE @MENSAJE VARCHAR(20) SELECT @FECHACLIENTE = FECHA FROM MOVIMIENTO WHERE TIPO = 'DEPOSITO' IF MONTH (@FECHACLIENTE) < MONTH(@FECHAPA) SET @MENSAJE = 'EL CLIENTE ES MOROSO' RETURN @MENSAJE END DEMO SELECT dbo.moroso ('15/02/2011') Página 7 de 8 Revisión 1.
C) CÁLCULOS Y REPORTE 5. RESULTADOS Y CONCLUSIONES 6. ANEXOS 7. REFERENCI http://www.devjoker.com/contenidos/catss/292/transacciones-en-transact-sql.aspx http://cursos.aiu.edu/base%20de%20datos%20distribuidas/pdf/tema%204.pdf http://www.fdi.ucm.es/profesor/fernan/dbd/apuntestema07.pdf http://www.sqlserverya.com.ar/temarios/descripcion.php?cod=147&punto=141 Página 8 de 8 Revisión 1.