PostgreSQL - convertir entre tipos de datos segun campos

 
Vista:

convertir entre tipos de datos segun campos

Publicado por Felipe Amezquita (4 intervenciones) el 02/02/2006 21:51:09
Bueno amigos de postgres la cuestion es la siguiente resulta que hago un update dinamico a apartir de unos parametros de entrada el asunto es que cueando voy ha actualizar un campo que es numeric no me lo permite ya que el valor es un varcgar como puedo convertir este valor a el tipo numeric para que me acepte la actualizacion.
la funciuon es asi y el error el siguiente.
CREATE OR REPLACE FUNCTION actualizar_persona_direccion(in_per_codigo persona_direccion.per_codigo%type,
in_dir_codigo persona_direccion.dir_codigo%type,
in_perdir_fecing Varchar,
in_campo varchar,
in_valor varchar)
RETURNS "varchar" AS
$BODY$
declare
cadena Varchar(500);
var_valor Varchar(50);
registro record;
xx varchar;
fechaIng date;
yy varchar;
pp numeric;
begin
var_valor := in_valor;
fechaIng := to_date(in_perdir_fecing,'DD/MM/YYYY HH:MI:SS AM');
if (in_campo = 'PERDIR_FECCAN') then
var_valor := to_char(current_date,'DD/MM/YYYY');
end if;

pp:=es_numero(in_valor);
if(pp=0) then

cadena := 'update persona_direccion set '||in_campo||' = lower('''||yy||''')
where per_codigo='||in_per_codigo||' AND dir_codigo ='||in_dir_codigo||' AND perdir_fecing ='||fechaIng||'';
EXECUTE cadena;
else
yy:= to_char(5, '999D99');
cadena := 'update persona_direccion set '||in_campo||' = lower('''||yy||''')
where per_codigo='||in_per_codigo||' AND dir_codigo ='||in_dir_codigo||' AND perdir_fecing ='||fechaIng||'';
EXECUTE cadena;
end if;
return 1;
/*
if (get_es_titular_pagador(in_per_codigo) = 0) then
-- se actualizan las direcciones de los programas que tiene la
-- persona, si esta es de tipo titular/pagador
FOR registro IN select distinct a.afi_codigo as per_codigo,up.prg_codigo,up.dir_codigo,to_char(up.ubiprg_fecing, 'DD/MM/YYYY') as ubiprg_fecing
from afiliado a, ubicacion_programa up where (a.afi_codigo = in_per_codigo) AND (up.dir_codigo = in_dir_codigo) AND (a.prg_codigo = up.prg_codigo) LOOP

xx:=actualizar_ubicacion_programa(registro.prg_codigo,registro.dir_codigo,registro.ubiprg_fecing,in_campo,var_valor);

END LOOP;
return xx;
end if;*/

end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

ERROR: column "tip_codigo" is of type numeric but expression is of type text
HINT: You will need to rewrite or cast the expression.
CONTEXT: SQL statement "update persona_direccion set tip_codigo = lower(' 5,00')
where per_codigo=25 AND dir_codigo =27 AND perdir_fecing =02/02/2006"
PL/pgSQL function "actualizar_persona_direccion" line 26 at execute statement
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder