Discusión:Prácticas ABD 2016
De FdIwiki ABD
Revisión a fecha de 20:16 15 mar 2016; ABD0419 (Discusión | contribuciones)
--ABD0419 (discusión) 19:23 15 mar 2016 (CET) (Carlos Martínez Pérez y Carlos Martínez Gutiérrez)
create or replace PROCEDURE PEDIDOS_CLIENTE (
dni_a_buscar clientes.dni%type ) as -- variables propias CURSOR cursor_cliente IS --cursor para encontrar el cliente select * from clientes where clientes.dni = dni_a_buscar; cl cursor_cliente%rowtype; CURSOR cursor_pedido IS --cursor para encontrar sus pedidos select * from pedidos where pedidos.cliente = dni_a_buscar order by pedidos.fecha_hora_pedido; --ordenados por fecha pe cursor_pedido%rowtype; suma_importe pedidos.importe_total%type; --suma de sus pedidos
-- excepciones de usuario no_pedidos EXCEPTION; no_cliente EXCEPTION;
BEGIN
OPEN cursor_cliente; FETCH cursor_cliente INTO cl; IF cursor_cliente%notfound then --si no se ha encontrado raise no_cliente; --lanzamos excepción END IF;
LOOP --escribimos sus datos y volvemos a buscar dbms_output.put_line('Nombre: ' || cl.nombre); dbms_output.put_line('Apellidos: ' || cl.apellido); dbms_output.put_line('Telefono: ' || cl.telefono); FETCH cursor_cliente INTO cl; EXIT when cursor_cliente%notfound;--si ya no hay más que buscar salimos END LOOP;
CLOSE cursor_cliente; OPEN cursor_pedido; FETCH cursor_pedido INTO pe; IF cursor_pedido%notfound then --si no tiene pedidos raise no_pedidos; --lanzamos excepción END IF;
LOOP --escribimos los datos del pedido y volvemos a buscar dbms_output.put_line(' Codigo: ' || pe.codigo); dbms_output.put_line(' Fecha: ' || pe.fecha_hora_pedido); dbms_output.put_line(' Fecha entrega: ' || pe.fecha_hora_entrega); dbms_output.put_line(' Estado: ' || pe.estado); dbms_output.put_line(' Importe: ' || pe.importe_total); dbms_output.put_line(' ----- '); FETCH cursor_pedido INTO pe; EXIT when cursor_pedido%notfound; END LOOP;
CLOSE cursor_pedido;
OPEN cursor_pedido; --calculamos la suma del importe de sus pedidos suma_importe := 0; LOOP FETCH cursor_pedido INTO pe; EXIT when cursor_pedido%notfound; suma_importe := suma_importe + pe.importe_total; END LOOP; CLOSE cursor_pedido;
IF suma_importe != 0 then --si ha habido pedidos y hay un precio real dbms_output.put_line('Suma de sus pedidos: ' || suma_importe); END IF; --CONTROL DE EXCEPCIONES EXCEPTION when no_cliente then DBMS_output.put_line('cliente no encontrado'); when no_pedidos then DBMS_output.put_line('el cliente no ha hecho pedidos'); when others then DBMS_output.put_line('excepcion desconocida');
END;