Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

ERROR en POSTGRES

Estas en el tema de ERROR en POSTGRES en el foro de PostgreSQL en Foros del Web. hola a todos los postgresistas tengo, me sale un error y no lo encuentro es el siguiente: ERROR: value too long for type character(1) CONTEXT: ...
  #1 (permalink)  
Antiguo 22/03/2008, 21:18
 
Fecha de Ingreso: julio-2005
Mensajes: 9
Antigüedad: 18 años, 9 meses
Puntos: 0
ERROR en POSTGRES

hola a todos los postgresistas tengo, me sale un error y no lo encuentro es el siguiente:

ERROR: value too long for type character(1)
CONTEXT: PL/pgSQL function "ins_usuario" line 11 at select into variables

Tengo la siguiente funcion:

create or replace function ins_usuario(nombres varchar(20),ap_paterno varchar(20),ap_materno varchar(20),telf_casa varchar(15),telf_celular varchar(9),direccion varchar(80),fecha_nac varchar(12),email varchar(38),ci varchar(7),profesion varchar(25),area varchar(25),cargo varchar(25),usuario varchar(16),pass varchar(32))
RETURNS integer AS $$
DECLARE
n_cod_per char;
nuevo char;
aux1 char;
aux2 char;
aux3 char;
val1 integer;
val2 integer;
val3 integer;
begin
select max(codigo_per) INTO n_cod_per from datos_personales.persona;
aux1 = substr(n_cod_per,2,1);
aux2 = substr(n_cod_per,3,1);
aux3 = substr(n_cod_per,4,1);
val1 = to_number(aux1,9);
val2 = to_number(aux2,9);
val3 = to_number(aux3,9);
if (val1=0) then
if (val2=0) then
val3 = val3 + 1;
nuevo='u'||to_char(val1,'99')||to_char(val2,'99')| |to_char(val3,'99');
end if;
end if;
insert into datos_personales.persona values(nuevo,nombres,ap_paterno,ap_materno,telf_ca sa,telf_celular,direccion,fecha_nac,email,ci,profe sion,area,cargo);
insert into seguridad.usuario values(nuevo,usuario,md5(pass));
END;
$$
LANGUAGE 'plpgsql'

Y ejecuto la funcion de la siguiente manera
select ins_usuario('fabiola','loza','medrano','591-464-53565','728-64393','Juana','a','a','a','a','a','a','saurio','s aurio')

Espero me puedan ayudar y decirme que es lo que pasa, que me falta o que es lo que sobra Muchas Gracias.
  #2 (permalink)  
Antiguo 23/03/2008, 07:54
 
Fecha de Ingreso: enero-2008
Mensajes: 25
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: ERROR en POSTGRES

Cita:
Iniciado por richisaurio Ver Mensaje
ERROR: value too long for type character(1)
CONTEXT: PL/pgSQL function "ins_usuario" line 11 at select into variables
Hola, como andas.

Segun lo que dice el mensaje, estas intentando asignar un valor demasiado largo en un tipo CHAR(1). El contexto del error esta en una sentencia SELECT INTO.

Ahora bien, observando el codigo de la funcion, veo que declaras n_cod_per del tipo char:

n_cod_per char;

esto hace que n_cod_per pueda almacenar un solo caracter. Y posteriormente, usas la sentencia:

select max(codigo_per) INTO n_cod_per from datos_personales.persona;

segun lo que entiendo (puesto que luego intentas extraer subcadenas de la variable n_cod_per) codigo_per es una cadena de mas de 1 caracter.

Deberias cambiar las declaraciones de las variables a una cadena mas larga.
(un varchar(50) por ejemplo)

Saludos.
  #3 (permalink)  
Antiguo 24/03/2008, 06:06
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: ERROR en POSTGRES

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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:44.