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;