Ahi tienes la explicación de bransh, vamos por si el error no era suficientemente descriptivo.....
Te paraste a leerlo / traducirlo???
pasaste por google???
En realidad, el problema está aqui
Código:
select max(codigo_per) INTO n_cod_per from datos_personales.persona;
ERROR: value too long for type character(1)
Cuando declaras una variable char sin precision, es equivalente a char(1)
Es decir, en un char intentas guardar más de un caracter. Como bien dice el error.
Salu2