Está en la página 1de 6

Materia

Base de Datos Avanzadas.

Maestro
Carlos M. Caraballo.

Alumno
Luis Antonio Santiago

Matricula
2020-10654

Carrera
Desarrollo de Software.

Tarea 7 – Programación en la DB
1. Revisa y comenta brevemente sobre los siguientes
puntos:

a) Diferencia entre “Trigger”, “Function” y “Stored


Procedure”:

Un procedimiento almacenado es un grupo de


sentencias de SQL que pueden realizar una tarea
particular en el sistema de gestión de bases de datos
relacionales. Una función es un módulo de código
autónomo que realiza una tarea específica.

El trigger es una rutina almacenada vinculada a una sola


tabla y que se ejecuta únicamente y en todos los casos
en que se dé un evento determinado en esa tabla.
Mientras que un procedimiento de almacenado debe ser
invocado para ejecutarse.

Una función es solo un fragmento de código disponible


para ser utilizado / reutilizado donde desee. Mientras
que un Trigger es "desencadenado" por un evento en la
base de datos.

2. Partiendo de las siguientes tablas,crea una función que reciba


como parámetro el ID del cliente, lo busque que retorne la
edad calculada.

Cliente(id PK,nombre,fechaIng date, estado int)

Cliente_hist(id PK, nombre, fechaIng date ,


fecha_movido date)

CREATE FUNCTION cal_edad (@id INT) RETURNS INT


AS
BEGIN

DECLARE @edad INT;

IF ( ( SELECT CONVERT(INT, (SELECT FORMAT(Nacimiento, 'MM') FROM cliente


WHERE id = @id)) ) <= ( SELECT CONVERT(INT,(SELECT FORMAT(GETDATE(),
'MM'))) ) )
BEGIN
IF ( ( SELECT CONVERT(INT, (SELECT FORMAT(Nacimiento, 'dd')
FROM cliente WHERE id = @id)) ) <= ( SELECT CONVERT(INT,(SELECT
FORMAT(GETDATE(), 'dd'))) ) )
BEGIN

SET @edad = ( SELECT CONVERT(INT, (SELECT


FORMAT(GETDATE(), 'yyyy') )) - ( SELECT CONVERT(INT,(SELECT
FORMAT(Nacimiento, 'yyyy') FROM cliente WHERE id = @id)) ) )

END ELSE BEGIN

SET @edad = ( SELECT CONVERT(INT, (SELECT


FORMAT(GETDATE(), 'yyyy') )) - ( SELECT CONVERT(INT,(SELECT
FORMAT(Nacimiento, 'yyyy') FROM cliente WHERE id = @id)) ) ) - 1

END

END ELSE BEGIN

SET @edad = ( SELECT CONVERT(INT, (SELECT


FORMAT(GETDATE(), 'yyyy') )) - ( SELECT CONVERT(INT,(SELECT
FORMAT(Nacimiento, 'yyyy') FROM cliente WHERE id = @id)) ) ) - 1
END

RETURN @edad

END

SELECT dbo.cal_edad(8);

3. Partiendo de las tablas creadas en el punto anterior, crea un


“Trigger” que permita registrar en la tabla histórica
(Cliente_hist) todos los clientes que se inserten en la tabla
“cliente”.

-- PUNTO 3:
CREATE TRIGGER TGR_INS_clientes ON cliente
AFTER INSERT
AS
BEGIN

DECLARE @nmbre VARCHAR(75), @fcha DATE, @naci DATE, @estd INT;


SELECT @nmbre = nombre, @fcha = fechaIng FROM INSERTED
INSERT INTO cliente_his VALUES (@nmbre,@fcha,GETDATE());
END
Aquí está el código completo

USE prog6
GO

CREATE TABLE cliente(

id INT PRIMARY KEY IDENTITY (1,1),


nombre VARCHAR(75),
fechaIng DATE,
Nacimiento DATE,
estado INT
);

CREATE TABLE cliente_his(


id INT PRIMARY KEY IDENTITY (1,1),
nombre VARCHAR(75),
fechaIng DATE,
fecha_movido DATE
);

INSERT INTO cliente VALUES ('Daniel Rodriguez', '2010-03-21','1975-04-01',


INSERT INTO cliente VALUES ('Pedro Sanchez', '2014-12-01','1989-10-09', 1);
INSERT INTO cliente VALUES ('Juan Perez', '2005-08-19','1980-12-22', 0);
INSERT INTO cliente VALUES ('Nicole Ramirez', '2020-01-13','1995-01-23', 1);
INSERT INTO cliente VALUES ('Rossy Santos', '2002-10-30','1975-07-30', 0);
INSERT INTO cliente VALUES ('Sandoval Robles', '2002-10-30','1960-02-10', 0);
INSERT INTO cliente VALUES ('Carlos Cuevas', '2002-10-30','1966-08-21', 1);
INSERT INTO cliente VALUES ('Ramon Ortega', '2014-12-01','1969-08-29', 1);
INSERT INTO cliente VALUES ('Daniel Rodriguez', '2021-08-15','2002-11-01', 1);

-- PUNTO 2:
CREATE FUNCTION cal_edad (@id INT) RETURNS INT
AS
BEGIN

DECLARE @edad INT;

IF ( ( SELECT CONVERT(INT, (SELECT FORMAT(Nacimiento, 'MM') FROM cliente


WHERE id = @id)) ) <= ( SELECT CONVERT(INT,(SELECT FORMAT(GETDATE(), 'MM'))) ) )
BEGIN

IF ( ( SELECT CONVERT(INT, (SELECT FORMAT(Nacimiento, 'dd') FROM cliente


WHERE id = @id)) ) <= ( SELECT CONVERT(INT,(SELECT FORMAT(GETDATE(), 'dd'))) ) )
BEGIN

SET @edad = ( SELECT CONVERT(INT, (SELECT FORMAT(GETDATE(),


'yyyy') )) - ( SELECT CONVERT(INT,(SELECT FORMAT(Nacimiento, 'yyyy') FROM cliente
WHERE id = @id)) ) )

END ELSE BEGIN


SET @edad = ( SELECT CONVERT(INT, (SELECT FORMAT(GETDATE(),
'yyyy') )) - ( SELECT CONVERT(INT,(SELECT FORMAT(Nacimiento, 'yyyy') FROM cliente
WHERE id = @id)) ) ) - 1

END

END ELSE BEGIN

SET @edad = ( SELECT CONVERT(INT, (SELECT FORMAT(GETDATE(),


'yyyy') )) - ( SELECT CONVERT(INT,(SELECT FORMAT(Nacimiento, 'yyyy') FROM cliente
WHERE id = @id)) ) ) - 1
END

RETURN @edad

END

SELECT dbo.cal_edad(8);
-- PUNTO 3:
CREATE TRIGGER TGR_INS_clientes ON cliente
AFTER INSERT
AS
BEGIN

DECLARE @nmbre VARCHAR(75), @fcha DATE, @naci DATE, @estd INT;

SELECT @nmbre = nombre, @fcha = fechaIng FROM INSERTED


INSERT INTO cliente_his VALUES (@nmbre,@fcha,GETDATE());

END

También podría gustarte