Está en la página 1de 5

BASE DE DATOS II – 2do.

CORTE

DEFINICIONES TEORICAS (pueden estar en forma de selección simple, pregunta negada ó


interpretación personal de término:
Ejemplos:
¿Que es una Base de Datos Activa?,
Un procedimiento almacenado tipo PROCEDURE, retorna un valor? SI [ ] No [ ]
¿ningún respaldo debe almacenarse en la infraestructura original?
¿A qué se debe el término RESTORE, indique con sus palabras su utilidad?
1.- Base de Datos Activas
2.- Modelo evento-condición-acción (E.C.A.)
3.- Procedimientos Almacenados SP (Store Procedure), utilidad
5.- Disparadores (Triggers)
6.- Transacciones, cuales son los limites
7.- Problemas mas comunes en el manejo de transacciones simultáneas
8.- Concurrencia, para qué su uso.
9.- Técnicas de Control de Concurrencia
10.- Respaldo de Datos (BACKUP)
11.- Recuperación/Restauración de datos (RESTORE)

Rafael Escalona
BASE DE DATOS II – 2do. CORTE

Ejercicio Nro. 1:
Tomando en cuenta la BDD “urbe” con el modelo de CORE Bancario (registro de clientes) y con las
entidades:

CREATE TABLE `clientes` ( CREATE TABLE `referencias` (


`id` int(11) PRIMARY KEY, `id` int(11) PRIMARY KEY,
`cedula` int(11) UNIQUE NOT NULL, `idclientes` int(11) NOT NULL,
`nombre` varchar(50) DEFAULT NULL, `cedula` int(11) DEFAULT NULL,
`fecha_nacimiento` date DEFAULT NULL); `nombre` varchar(50) DEFAULT NULL,
`telefono` varchar(20) DEFAULT NULL);

Elabore un SP que reciba los datos de un cliente nuevo y 2 referencias, de modo que se “registren” con
ésta llamada usando características transaccionales.

Rafael Escalona
BASE DE DATOS II – 2do. CORTE
Solución Ejercicio Nro. 1
CREATE PROCEDURE `insertar_cliente` (IN `pcedula` INT(10), IN `pnombre` VARCHAR(50), IN `pfecha_nacimiento` DATE, IN
`pcedula1` INT(10), IN `pnombre1` VARCHAR(50), IN `ptelefono1` VARCHAR(20), IN `pcedula2` INT(10), IN `pnombre2`
VARCHAR(50), IN `ptelefono2` VARCHAR(20))

Mi_etiqueta:Begin // inicio del codigo del SP, le ponemos un nombre de etiqueta al “begin” por si necesitamos detenerlo

declare miId int;

start transaction; // equivale a BEGIN TRANSACTION


insert into clientes(cedula,nombre,fecha_nacimiento) values(pcedula,pnombre,pfecha_nacimiento);
SELECT @@identity INTO miId;
if miID IS NULL then // evaluamos la correcta inserción del cliente
rollback;
SELECT 0;
LEAVE Mi_etiqueta; // detenemos el SP
end if;
insert into referencias(idclientes,cedula,nombre,telefono) values(miId,pcedula1,pnombre1,ptelefono1);
if ROW_COUNT() = 0 then // evaluamos la inserción de la 1era referencia
rollback;
SELECT 0;
LEAVE Mi_etiqueta; // detenemos el SP
end if;
insert into referencias(idclientes,cedula,nombre,telefono) values(miId,pcedula2,pnombre2,ptelefono2);
if ROW_COUNT() = 0 then // evaluamos la inserción de la 2da referencia
rollback;
SELECT 0;
LEAVE Mi_etiqueta; // detenemos el SP
end if;
commit; // equivale a END TRANSACTION
SELECT 1;
end
Rafael Escalona
BASE DE DATOS II – 2do. CORTE
Solución Ejercicio Nro. 1

Ejecutar en consola SQL:

CALL insertar_cliente(123,’JOSE’,’2000-01-02’,456,’ANA’,’041488888’,789,’PEDRO’,’0412455555’)

VERIFICAR LA SALIDA (0 ó 1)

Rafael Escalona
BASE DE DATOS II – 2do. CORTE
Ejercicio Nro. 2:

Elabore un pequeño diseño donde se implementen 2 tablas, una para cuentas bancarias de clientes (no hace
falta crear clientes, sólo referenciar la cédula) y una tabla para registrar los movimientos bancarios asociados
a esas cuentas.
Se requiere:
Elaborar un SP que reciba como parámetros los datos necesarios para actualizar un movimiento (por ejemplo
una transacción de compra por punto de venta), utilice el manejo de transacciones de modo que se permita
el manejo de situaciones de errores como Comprobar que nuestra cuenta existe es válida y está operativa.
(use la función ROW_COUNT vista en clase) o si ésta cuenta con saldo disponible en el caso de retiro/egreso
de dinero de la cuenta.

CREATE TABLE `cuentas` (`id` int(11) PRIMARY KEY,


`cedulaCliente` int(10) NOT NULL,
`numero` varchar(20) UNIQUE NOT NULL,
`saldo` decimal(12,2));

CREATE TABLE `movimientos` (`id` int(11) PRIMARY KEY,


`idcuentas` int(10) NOT NULL,
`referencia` varchar(20) NOT NULL,
`fecha` date NOT NULL,
`monto` decimal(12,2) NOT NULL);
Rafael Escalona

También podría gustarte