Diferencia entre revisiones de «Discusión:Prácticas ABD 2016»

De FdIwiki ABD
Saltar a: navegación, buscar
(pedidos_cliente_ABD0419.sql)
 
(Página blanqueada)
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;
 

Revisión de 20:17 15 mar 2016