HacerCompra

De FdIwiki ABD
Saltar a: navegación, buscar

create or replace PROCEDURE HacerCompra (

tarjeta tarjeta.NUMT%TYPE,

importeC compras.IMPORTE%TYPE,

dniCliente cliente.DNI%TYPE,

numFactura compras.NUMF%TYPE,

fecha compras.FECHA%TYPE,

nomTienda compras.TIENDA%TYPE

) as


-- vars de trabajo

numeroTarjeta NUMBER;

TIENDAP CHAR(20 BYTE);


-- cursor para verificar que no existe compra repetida

CURSOR cursor_consultaCompraRepetida IS

SELECT TIENDA

FROM COMPRAS

WHERE DNI = dniCliente AND NUMT = numeroTarjeta AND NUMF = numFactura;


--excepcion de compra duplicada

compra_duplicada EXCEPTION;


BEGIN


DBMS_output.put_line('--- Hacer Compra');

numeroTarjeta := ComprobarTarjeta(tarjeta, importeC, dniCliente);


IF numeroTarjeta IS NOT NULL THEN

CargarCompra(importeC, numeroTarjeta);

--compramos que no se duplica compra
OPEN cursor_consultaCompraRepetida;

FETCH cursor_consultaCompraRepetida into TIENDAP;


IF cursor_consultaCompraRepetida%NOTFOUND THEN

insert into compras values(dniCliente,numeroTarjeta,numFactura,fecha,nomTienda,importeC);


ELSE

--actualizamos la compra
update compras set tienda = 'Duplicado' WHERE DNI = dniCliente AND NUMT = numeroTarjeta AND NUMF = numFactura;
--lanzar excepcion
RAISE compra_duplicada;


END IF;

CLOSE cursor_consultaCompraRepetida;


ELSE

DBMS_output.put_line('--NO SE HA PODIDO CARGAR LA COMPRA PORQUE NO HAY TARJETA DISPONIBLE');


END IF;

--Desbloquear la tarjeta
commit;


EXCEPTION
WHEN compra_duplicada THEN
DBMS_output.put_line('--Compra duplicada');


END HacerCompra;

--Kevin (discusión) 20:22 19 may 2015 (CEST)