Un SELECT INTO sirve para guardar lo que retorne el SELECT en una variable para su uso posterior, en este caso en "id_departamento".
Me parece que para este ejercicio se hace primero un SELECT INTO para el manejo de la excepción "no_data_found". Si haces el UPDATE directo y resulta que no existe el id del departamento, el UPDATE no tiene por qué fallar, más bien concluye con éxito pero no actualiza ningún registro. Sin embargo un SELECT INTO lanzará un error cuando no haya resultados, así puedes asegurarte de mandar el mensaje correcto.
Me parece que para este ejercicio se hace primero un SELECT INTO para el manejo de la excepción "no_data_found". Si haces el UPDATE directo y resulta que no existe el id del departamento, el UPDATE no tiene por qué fallar, más bien concluye con éxito pero no actualiza ningún registro. Sin embargo un SELECT INTO lanzará un error cuando no haya resultados, así puedes asegurarte de mandar el mensaje correcto.