Vous êtes sur la page 1sur 6

CASO BANCOS

Se tiene una Base de Datos Bancos y se desea que a travs de un cursor se


guarde en una tabla de una segunda Base de datos (DWBancos), el nmero de
cuentas por cada tipo de moneda aperturadas por mes y por ao y ordenados
por mes y ao. Por ejemplo, en la tabla de la base de datos DWBancos debe
contener datos como:
Nro_cuentas Moneda
5
Soles
2
Dolares

Mes
4

Ao
2012
4
2012

RESOLUCION
Primero se crea la base de datos BANCOS con
sus respectivos datos en una consulta.
CREATE DATABASE BANCOS
GO
USE BANCOS
CREATE TABLE CLIENTE
(IDCLIENTE CHAR(8) NOT NULL,
APELLIDOS VARCHAR(32) NOT NULL,
NOMBRES VARCHAR(32) NOT NULL,
DOMICILIO VARCHAR(40) NOT NULL,
DNI CHAR(8) NOT NULL,
E_MAIL VARCHAR(36),
TELEFONOFIJO VARCHAR(11),
TELEFONOCELU VARCHAR(12),
TARJETA_ACTUAL CHAR(12) NOT NULL,
ACTIVO BIT,
CONSTRAINT CLIENTE_IDCLIENTE_PK PRIMARY KEY (IDCLIENTE))
CREATE TABLE TARJETA
(NROTARJETA CHAR(12) NOT NULL,
FECHAOTORGA DATETIME NOT NULL,
CADUCA CHAR(6) NOT NULL,
IDCLIENTE CHAR(8) NOT NULL,
CONSTRAINT TARJETA_NROTARJETA_PK PRIMARY KEY (NROTARJETA))
CREATE TABLE TIPOMONEDA
(IDTIPOMONEDA CHAR(2) NOT NULL,
DESCRIPCION VARCHAR(16)NOT NULL,
CONSTRAINT TIPOMONEDA_IDTIPOMONEDA_PK PRIMARY KEY (IDTIPOMONEDA))
CREATE TABLE TIPOCUENTA

(IDTIPOCUENTA CHAR(2) NOT NULL,


DESCRIPCION VARCHAR(20) NOT NULL,
CONSTRAINT TIPOCUENTA_IDTIPOCUENTA_PK PRIMARY KEY (IDTIPOCUENTA))
CREATE TABLE CUENTA
(NROCUENTA CHAR(8) NOT NULL,
IDTIPOCUENTA CHAR(2) NOT NULL,
IDTIPOMONEDA CHAR(2) NOT NULL,
IDCLIENTE CHAR(8) NOT NULL,
FECHAAPERTURA DATETIME NOT NULL,
SALDOACTUAL MONEY NOT NULL,
CONSTRAINT CUENTA_NROCUENTA_PK PRIMARY KEY (NROCUENTA))
CREATE TABLE TIPOOPERACION
(IDTIPOOPERA CHAR(2) NOT NULL,
DESCRIPCION VARCHAR(24) NOT NULL,
CONSTRAINT TIPOOPERACION_IDTIPOOPERA_PK PRIMARY KEY (IDTIPOOPERA))
CREATE TABLE OPERACION
(IDOPERACION CHAR(10) NOT NULL,
NROCUENTA CHAR(8) NOT NULL,
IDTIPOOPERA CHAR(2) NOT NULL,
MONTO MONEY NOT NULL,
FECHAOPERA DATETIME NOT NULL,
CONSTRAINT OPERACION_IDOPERACION_PK PRIMARY KEY (IDOPERACION))
/*------------------------------------------------------------------ */
/*Creando las restricciones: relaciones (claves forneas) y chequeos */
/*------------------------------------------------------------------ */
ALTER TABLE OPERACION
ADD CONSTRAINT OPERACION_NROCUENTA_FK FOREIGN KEY (NROCUENTA) REFERENCES
CUENTA(NROCUENTA)
ALTER TABLE OPERACION
ADD CONSTRAINT OPERACION_IDTIPOOPERA_FK FOREIGN KEY (IDTIPOOPERA) REFERENCES
TIPOOPERACION(IDTIPOOPERA)
ALTER TABLE CUENTA
ADD CONSTRAINT CUENTA_IDTIPOCUENTA_FK FOREIGN KEY (IDTIPOCUENTA) REFERENCES
TIPOCUENTA(IDTIPOCUENTA)
ALTER TABLE CUENTA
ADD CONSTRAINT CUENTA_IDTIPOMONEDA_FK FOREIGN KEY (IDTIPOMONEDA) REFERENCES
TIPOMONEDA(IDTIPOMONEDA)
ALTER TABLE CUENTA
ADD CONSTRAINT CUENTA_IDCLIENTE_FK FOREIGN KEY (IDCLIENTE) REFERENCES
CLIENTE(IDCLIENTE)

ALTER TABLE CUENTA


ADD CONSTRAINT CUENTA_SALDOACTUAL_CK CHECK (SALDOACTUAL>=0)
ALTER TABLE TARJETA
ADD CONSTRAINT TARJETA_IDCLIENTE_FK FOREIGN KEY (IDCLIENTE) REFERENCES
CLIENTE(IDCLIENTE)
ALTER TABLE CLIENTE
ADD CONSTRAINT CLIENTE_DNI_UK UNIQUE (DNI)
/*------------------------------------------ */
/*Creando registros a cada una de las tablas */
/*------------------------------------------ */
INSERT INTO CLIENTE
VALUES ('CL000001','SALGADO RUIZ','LUIS ENRIQUE','AV PERU
678','18021474','luicho@hotmail.com',
'044-252141','044-9374541','057088000001',1)
INSERT INTO TARJETA
VALUES ('057088000001','20050114','022008','CL000001')
INSERT INTO CLIENTE
VALUES ('CL000002','VEJARANO VIGO','ROSA MARIA','AV ESPAA 478','18010520','',
'044-221515','044-9368995','057088000002',1)
INSERT INTO TARJETA
VALUES ('057088000002','20050118','022008','CL000002')
INSERT INTO CLIENTE
VALUES ('CL000003','FERNANDEZ DIAZ','RAFAEL JOSE','GAMARRA
455','18485714','rafajose@yahoo.com',
'044-255589','044-9699598','057088000003',1)
INSERT INTO TARJETA
VALUES ('057088000003','20050122','032008','CL000003')
INSERT INTO TIPOMONEDA
VALUES ('01','SOLES')
INSERT INTO TIPOMONEDA
VALUES ('02','DOLARES')
INSERT INTO TIPOCUENTA
VALUES ('01','AHORRO')
INSERT INTO TIPOCUENTA
VALUES ('02','CORRIENTE')
INSERT INTO CUENTA
VALUES ('00000001','01','01','CL000001','20050114',600)
INSERT INTO CUENTA
VALUES ('00000002','01','02','CL000001','20050114',400)
INSERT INTO CUENTA

VALUES ('00000003','01','01','CL000002','20050118',1000)
INSERT INTO CUENTA
VALUES ('00000004','01','01','CL000003','20050122',350)
INSERT INTO TIPOOPERACION
VALUES ('01','DEPOSITO')
INSERT INTO TIPOOPERACION
VALUES ('02','RETIRO')
INSERT INTO OPERACION
VALUES ('0000000001','00000001','01',600,'20050114')
INSERT INTO OPERACION
VALUES ('0000000002','00000002','01',400,'20050114')
INSERT INTO OPERACION
VALUES ('0000000003','00000003','01',1000,'20050118')
INSERT INTO OPERACION
VALUES ('0000000004','00000004','01',350,'20050122')

Segundo se abre una nueva consulta y se ingresa


el siguiente cdigo, despus de haber hecho esto,
seleccionar Ejecutar!:
------------------------------INICIO---------------------------------CREATE DATABASE DWBANCOS
GO
USE DWBANCOS
GO
Create table TABLA_CUENTA (NRO_CUENTAS CHAR(2),MONEDA CHAR(10),MES CHAR(2),
AO CHAR(10))
GO
USE BANCOS
GO
declare @ncuenta char(2), @moneda CHAR(10), @mes char(2), @ao char(10)
declare NCUENTA cursor for
SELECT COUNT(C.NROCUENTA) AS Nro_Cuentas,T.DESCRIPCION as Moneda
,MONTH(GETDATE()) AS Mes,YEAR(GETDATE()) AS Ao
FROM CUENTA C INNER JOIN TIPOMONEDA T ON C.IDTIPOMONEDA = T.IDTIPOMONEDA
GROUP BY DESCRIPCION
OPEN NCUENTA
FETCH NEXT FROM NCUENTA INTO @ncuenta,@moneda,@mes,@ao
WHILE @@FETCH_STATUS=0
BEGIN

INSERT INTO DWBANCOS.dbo.TABLA_CUENTA


VALUES(@ncuenta,@moneda,@mes,@ao)
FETCH NEXT FROM NCUENTA INTO @ncuenta,@moneda,@mes,@ao
END
close NCUENTA
DEALLOCATE NCUENTA
GO
USE DWBANCOS
SELECT * FROM TABLA_CUENTA

------------------------------FIN----------------------------------

EXPLICACIN
Lo que est haciendo este script es primero crear
una base de datos llamado DWBANCOS.
CREATE DATABASE DWBANCOS
GO

Segundo, voy a usar la base DWBANCOS,


adems de crear una tabla llamado
TABLA_CUENTA.
USE DWBANCOS
GO
Create table TABLA_CUENTA (NRO_CUENTAS CHAR(2),MONEDA CHAR(10),MES CHAR(2),
AO CHAR(10))
GO

Tercero, voy a usar la base BANCOS.


USE BANCOS
GO

Cuarto, la declaracin del cursor, abrir cursor,


cerrar cursor, liberar cursor, etc, en la base
BANCOS, todo esto enviando los datos de la

base BANCOS a la base DWBANCOS a travs


del cursor.
declare @ncuenta char(2), @moneda CHAR(10), @mes char(2), @ao char(10)
declare NCUENTA cursor for
SELECT COUNT(C.NROCUENTA) AS Nro_Cuentas,T.DESCRIPCION as Moneda
,MONTH(GETDATE()) AS Mes,YEAR(GETDATE()) AS Ao
FROM CUENTA C INNER JOIN TIPOMONEDA T ON C.IDTIPOMONEDA = T.IDTIPOMONEDA
GROUP BY DESCRIPCION
OPEN NCUENTA
FETCH NEXT FROM NCUENTA INTO @ncuenta,@moneda,@mes,@ao
WHILE @@FETCH_STATUS=0
BEGIN
INSERT INTO DWBANCOS.dbo.TABLA_CUENTA
VALUES(@ncuenta,@moneda,@mes,@ao)
FETCH NEXT FROM NCUENTA INTO @ncuenta,@moneda,@mes,@ao
END
close NCUENTA
DEALLOCATE NCUENTA
GO

Quinto y ltimo se est usando:


SELECT * FROM TABLA_CUENTA

Y el resultado final es: