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;