Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Taller Join - Procesos - Funciones-Triggers

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

ESCUELA POLITÉCNICA NACIONAL

ESCUELA DE FORMACIÓN DE TECNÓLOGOS


TECNOLOGÍA SUPERIOR EN DESARROLLO DE SOFTWARE

PERÍODO ACADÉMICO: 2022-B ASIGNATURA: BASES DE DATOS (TSI313)


DOCENTE: MSc. Marina Vintimilla
NOMBRE DEL ESTUDIANTE (S):
NOTA:
TEMA: TALLER DE PROCESOS, DISPARADORES Y JOIN

INSTRUCCIONES:

Deberás insertar la copia de la ventana de ejecución que compruebe que se ejecutó con éxito.

Implementar la BD y el DER siguiente, ingresar datos, ejecutar los comandos solitados. Incluye
las pantallas de solución.

--*** PRIMERA PARTE ***

-- CREAMOS LA BASE DE DATOS*/


drop database Banco

Create Database Banco


Go
--USE, PARA HACER USO DE LA BASE DE DATOS
Use Banco

1
Go

-- CREAMOS LAS TABLAS CLIENTE, CUENTA Y MOVIMIENTO


Create Table Cliente (
Idcliente Varchar (5) Primary Key,
Apellidos Varchar (30),
Nombres Varchar (30)
)
Go
Create Table Cuenta (
Idcliente Varchar (5),
Idcuenta Varchar (5) Primary Key,
Saldo Float,
Divisa Varchar (2)
)
Go
Create Table Movimiento (
Idcuenta Varchar (5),
Idmovimiento numeric (4) Primary Key,
Tipo Varchar (2),
Monto Float,
Fecha Datetime
)
Go

--ALTERAMOS LAS TABLAS, PARA CREAR LAS RELACIONES CORRESPONDIENTES


Alter Table Cuenta
Add Foreign Key (Idcliente) References Cliente
Go
Alter Table Movimiento
Add Foreign Key (Idcuenta) References Cuenta
Go

-- EJECUTAR LAS INSERCIONES CORRESPONDIENTES PARA CADA TABLA


-- RECUERDE QUE HAY LLAVES FOREIGN KEY Y PRIMARY KEY
INSERT INTO CLIENTE
VALUES('A100','ALBAN','JOSE'),('B200','BURBANO','ANA'),('A300','CALDERON','RICARDO')

INSERT INTO CUENTA


VALUES('A100','30100',1000,'D'),('B200','30200',1000,'D'),
('B200','02100',2000,'DA'),
('A300','30300',5000,'DA'),('A300','02200',1000,'DA')

INSERT INTO MOVIMIENTO


VALUES ('30100','010','P',500,'28-02-2021'),

('30100','009','T',800,'28-02-2021'),
('30200','008','D',500,'08-03-2021'),
('30100','001','R',200,'01-03-2021'),
('30200','002','D',100,'04-03-2021'),
('02100','003','R',200,'01-02-2021'),
('02100','004','R',300,'05-02-2021'),
('30300','005','D',1000,'10-02-2021'),
('02200','006','R',200,'01-03-2021'),
('02200','007','R',800,'05-03-2021')

2
SELECT * FROM CLIENTE
SELECT * FROM CUENTA
SELECT * FROM MOVIMIENTO
GO

-- EJECUTAR LAS CONSULTAS SIGUIENTES USANDO JOIN

--1A CONSULTAR LAS CUENTAS DE LOS CLIENTES CUYO APELLIDO EMPIECE POR A

Select B.Apellidos + ',' + B.Nombres As Cliente, A.Idcuenta, A.Saldo


From Cuenta A Inner Join Cliente B On A.Idcliente = B.Idcliente
Where B.Apellidos Like 'A%'

--1B CONSULTAR TODO LOS MOVIMIENTOS DE LAS CUENTAS EN DIVISA DOLARES


--DEL CLIENTE CUYO APELLIDO ES BURBANO

Select A.Idcuenta, NOMBRES,APELLIDOS, C.Fecha, C.Monto,


Tipo = Case 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 = 'D' And B.Apellidos = 'BURBANO'
Order By C.Fecha Desc

--1C CONSULTAR TODO LOS MOVIMIENTOS DE LAS CUENTAS DEL CLIENTE CALDERON
--ORDENADOS POR EL NÚMERO DE CUENTA

Select C.Nombres, C.Apellidos, Cu.Idcuenta, Cu.Saldo, Cu.Divisa, M.Idmovimiento,


M.Monto, Tipo = Case M.Tipo
When 'D' Then' Deposito'
When 'R' Then 'Retiro'
When 'T' Then' Transferencia'
End
From Cliente C Inner Join Cuenta Cu
On C.Idcliente = Cu.Idcliente
Inner Join Movimiento M On Cu.Idcuenta = M.Idcuenta
Where C.Apellidos = 'CALDERON'
Order By Cu.Idcuenta

--1D CONSULTAR LAS DIVISAS QUE NO TENGAN NINGUNA CUENTA ASOCIADA

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'

--1E CONSULTAR LOS MOVIMIENTOS DE INGRESO DE CALDERON Y LOS MOVIMIENTOS


--DE TRASFERENCIA DE ALBAN

Select C.Nombres, C.Apellidos, Cu.Idcuenta, M.Idmovimiento, M.Monto,


Tipo = Case M.Tipo
When 'D' Then' Deposito'

3
When 'R' Then 'Retiro'
When 'T' Then' Transferencia'
End
From Cliente C Inner Join Cuenta Cu
On C.Idcliente = Cu.Idcliente
Inner Join Movimiento M On Cu.Idcuenta = M.Idcuenta
Where C.Apellidos = 'ALBAN' and Tipo like 'T' OR
C.Apellidos = 'CALDERON' and Tipo like 'D'
Order By C.Apellidos

--1F CREAR UNA FUNCIÓN QUE RETORNE SI UN CLIENTE ES MOROSO

drop function moroso

Create function Moroso (@Fechapago Datetime)


Returns Varchar (20)
As
Begin
Declare @Fechacliente Datetime=null
Declare @Mensaje Varchar (20)='no es moroso'
Select @Fechacliente = Fecha From Movimiento Where Tipo = 'P'
If Month (@Fechacliente) > Month(@Fechapago)
begin
Set @Mensaje = 'El Cliente Es Moroso'
end
Return @Mensaje
End

-- EJECUTA LA FUNCIÓN

Select Dbo.Moroso ('15/01/2021')


Select Dbo.Moroso ('08/03/2021')

--*** SEGUNDA PARTE ***

--CREAS OTRA BASE DE DATOS LLAMADO EMPRESA


DROP DATABASE EMPRESA

Go
Create Database Empresa
Go
Use Empresa
Go

-- CREAR LAS TABLAS EMPLEADOS, CONTROLES Y COPIA EMPLEADOS

Create Table Empleados (


Id Int Not Null Identity,
Documento Varchar (30) Not Null,
Apellido Varchar (30) Not Null,
Nombre Varchar (30) Not Null,
Seccion Varchar (20) Not Null,
Sueldo Float Null,
Fechaingreso Datetime Null
)
Go

4
Create Table Controles (
Usuario Varchar(35),
Fecha Datetime
)
Go

Create Table Copiaempleados (


Id Int Not Null,
Documento Varchar (30) Not Null,
Apellido Varchar (30) Not Null,
Nombre Varchar (30) Not Null,
Seccion Varchar (20) Not Null,
Sueldo Float Null,
Fechaingreso Datetime Null
)
Go

-- UTILIZAR TRIGGER EN SQL SERVER, TRIGGER LLAMADO


-- TRG_COPIAEMPLEADOS SE DISPARARÁ CADA QUE HAGAMOS INSERCIONES EN LA TABLA
-- EMPLEADOS LLEVANDO UNA COPIA DE LAS INSERCIONES A LA TABLA COPIAEMPLEADOS

Create Trigger Trg_Copiaempleados


On Empleados
For Insert
As
Begin
Insert Into Copiaempleados
Select * From Inserted
End
Go

-- VERIFICAR EL TRIGGER ANTERIOR CON LAS SIGUIENTES INSERCIONES

Insert Into Empleados Values


('22999000','Cordova','Wlimer','Sistemas',680,'24/10/2005')
Insert Into Empleados Values
('22333444','Acosta','Ana','Secretaria',500,'05/05/2000')
Insert Into Empleados Values
('22777888','Cordova','Daniela','Secretaria',560,'25/08/2006')
Go

-- EJECUTAR SELECT A LAS DOS TABLAS Y VERIFICAR, SOLO INSERTAMOS A LA TABLA --


EMPLEADOS Y EL TRIGGER
-- SE ENCARGARÁ DE INSERTARLO A LA OTRA TABLA

Select * From Empleados


Select * From Copiaempleados

--*** TERCERA PARTE ***

-- CREAR Y USAR PROCEDIMIENTOS ALMACENADOS

--3A INCREMENTAR SUELDO DE LOS EMPLEADOS CON MÁS DE 3 AÑOS DE SERVICIO A


-- UN 20% MAS
Go
Create Procedure Usp_Empleados_Aumentarsueldo
As

5
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))
Go

--EJECUTAR SOLO UNA VEZ EL PROCEDIMIENTO


Execute Usp_Empleados_Aumentarsueldo
Go

--VERIFICAMOS QUE SE INCREMENTO


Select * From Empleados

--3B PROCEDIMIENTO QUE PERMITE ALMACENAR VALORES NULOS


Go
Create Procedure Usp_Empleadosingresar
@Documento Varchar(30),
@Apellido Varchar(30),
@Nombre Varchar(30),
@Seccion Varchar(20)
As
Begin
Insert Into Empleados Values (@Documento, @Apellido, @Nombre, @Seccion, Null, Null)
End
Go

--EJECUTAMOS EL PROCEDIMIENTO
Execute Usp_Empleadosingresar '22777889','Durand','Dany','Secretaria'
Go
--VERIFICAMOS QUE INSERTO UN NUEVO REGISTRO CON ID 4 Y EL
--TRIGGER ANTERIOR SIGUE DISPARÁNDOSE
Select * From Empleados

--3C PROCEDIMIENTO QUE PERMITE REALIZAR BACKUP DE LA BASE DE DATOS


--PARA OTRA BASE DE DATOS SOLO PONER EL NOMBRE DE LA BASE DE DATOS Y LA RUTA (CAMBIA
EL DESTINO)
DROP PROCEDURE Copiadatabase

Create Procedure Copiadatabase


As
Backup Database Empresa To Disk = 'D:\\BACKUP.BAK'
With Init;
Go

--EJECUTAMOS EL PROCEDIMIENTO, VAMOS A LA RUTA Y AHÍ ESTARÁ EL BACKUP CREADO


Execute Copiadatabase
Go

--*** CUARTA PARTE ***

--4A DISPARADOR QUE REGISTRA EL USUARIO Y LA FECHA EN LA QUE SE REALIZA UN


--INSERT EN LA TABLA EMPLEADOS Y LOS ALMACENA EN LA TABLA CONTROLES
Go

6
Create Trigger Trg_Controles
On Empleados
For Insert
As
Insert Into Controles Values (Suser_Name(), Getdate())
Go

--EJECUTAMOS EL TRIGGER
Insert Into Empleados Values ('22777899', 'Gonzales', 'Luis', 'Secretaria', 560,
'25/08/2008')
Go

--VERIFICAMOS, CADA VEZ QUE SE EJECUTE UN INSERT EN EMPLEADOS, EL TRIGGER


-- GUARDARA UN REGISTRO EN CONTROLES

Select * From Controles

--4B DESENCADENADOR QUE DESCUENTA LA EXISTENCIA DE LA TABLA PRODUCTOS SEGUN -- EL


PEDIDO
Go
Create Database Almacen
Go
Use Almacen
Go
Create Table Productos (
Id_Producto Char (8) Primary Key Not Null,
Nombreproducto Varchar (25) Not Null,
Existencia Int Null,
Preciso Decimal(10,2) Not Null,
Precioventa Decimal (10,2)
)
Go
Create Table Pedido (
Id_Pedido Int Identity,
Id_Producto Char (8) Not Null,
Cantidad_Pedido Int Constraint Pk_Id_Producto Foreign Key (Id_Producto)
References Productos (Id_Producto)
)
Go
--CREAMOS DESENCADENADOR CON TRIGGER
Create Trigger Trg_Pedido_Articulos
On Pedido
For Insert
As
Update Productos Set Existencia = Existencia - (Select Cantidad_Pedido From
Inserted)
Where Id_Producto = (Select Id_Producto From Inserted)
Go
--INSERTAMOS REGISTROS A LA TABLA PRODUCTOS PARA REALIZAR LA DEMOSTRACIÓN
Insert Into Productos Values ('P001', 'Filtros Pantalla', 5, 10, 12.5)
Insert Into Productos Values ('P002', 'Parlantes', 7, 10, 11.5)
Insert Into Productos Values ('P003', 'Mouse', 8, 4.5, 6)
Go
-- VERIFICAR LAS CANTIDADES, LUEGO REALIZAS EL PEDIDO DE LA SIGUIENTE
-- MANERA
Insert Into Pedido Values ('P003',5)

-- VERIFICAR SI FUNCIONA, EL TRIGGER Y DESCONTÓ LA CANTIDAD SEGÚN EL PEDIDO

7
Select * From Productos
Select * From Pedido

NOTA: SUBE A LA PLATAFORMA SIEMPRE COMO Apellido.NOMBRE

Sube al documento en Word, no lo recibo en PDF.

Si es GRUPAL sube solo uno de los estudiantes, los apellidos en orden alfabético serán el
nombre del archivo: ApellidoEstudiante1.ApellidoEstudiante2…

NO ME CONFUNDAS ENVIANDO VARIAS VECES.

También podría gustarte