|
|
Línea 1: |
Línea 1: |
− | --[[Usuario:ABD0419|ABD0419]] ([[Usuario discusión: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;
| |