All pastes #2129862 Raw Edit

Unnamed

public text v1 · immutable
#2129862 ·published 2012-03-19 09:20 UTC
rendered paste body
create or replace procedure GET_DOCTOR_ENCARGADO(P_INSCRIP ENFERMO.INSCRIPCION%TYPE) IS
	
  l_doctor_asignado doctor.doctor_no % type;
  l_doctor doctor % rowtype;
  l_num_pacientes integer;
  demasiados_pacientes exception;
  
begin

  -- Recuperar el número de doctor correspondiente al enfermo especificado.
  -- Si fallase se lanzaría una excepción no_data_found, como se especifica
  -- en el enunciado.
  select enfermo.doctor_no into l_doctor_asignado
    from enfermo 
    where enfermo.inscripcion = p_inscrip;
  
  -- Recuperar el doctor que corresponde al código anterior.
  select * into l_doctor from doctor 
    where doctor.doctor_no = l_doctor_asignado;
  
  -- Mostrar por pantalla el doctor que atiende al paciente y su especialidad.
  dbms_output.put_line('Doctor ' || l_doctor.apellido || ', especialidad ' || l_doctor.especialidad);
  
  -- Comprobar a cuantos atiende
  select count(*) into l_num_pacientes from enfermo where enfermo.doctor_no=l_doctor.doctor_no;
  
  -- Lanzar excepción si no es el único paciente
  if l_num_pacientes > 1 then
    raise demasiados_pacientes;
  end if;
  
exception

  when no_data_found then
    dbms_output.put_line('ERROR. El enfermo no pudo ser localizado.');
  
  when demasiados_pacientes then
    DBMS_OUTPUT.PUT_LINE('El doctor atiende a más pacientes.');
  
end;