Hola Carlos, el error creo que te dice que ese valor no es válido para
un INTEGER,
y eso significa que debes hacer un casteo a INTEGER en algunas o todas
estas lineas siguientes, pues en ella hay funciones que no devuelven
INTEGER y eso puede generar que se quede algun numeric o algun otro tipo
distinto de integer:
* var_lgh:=div(var_div,power(10.0,var_x))::integer; -- dividendo**
** result_e:=result_e+var_lgh*power(10,var_s-1)::integer; **
** var_div:=mod(var_div,power(10.0,var_x))::integer; -- resto *
Saludos
On 25/08/16 21:42, Carlos T. Groero Carmona wrote:
Hola lista, ante todo gracias por cualquier comentario o sugerencia...
Tengo esta función que tiene como parámetro de entrada un número, y
luego devuelve ese número invertido...ejemplo...entro el 531 y tiene
que devolver el 135, la función o ejercicio tiene como principal
características que no puedo usar ningún tipo de función o tipo de
dato para cadena...solo puedo usar tipos de datos y funciones
numéricas...ya la hice...y cuando la debugeo me funciona bien, pero
cuando la ejecuto me devuelve este error:
ERROR: invalid input syntax for integer: "31.0000000000000000"
CONTEXT: PL/pgSQL function some_user.reverse_order(integer) line 18
at assignment
la función es la siguiente...
CREATE OR REPLACE FUNCTION some_user.reverse_order (
var integer
)
RETURNS integer AS'
DECLARE
var_lgh integer ;
var_div integer :=$1::integer;
var_s integer :=1;
result_e integer:=0;
tf BOOLEAN := true;
var_x integer;
lth integer :=trunc(log($1))+1;
-- variable_name datatype;
BEGIN
if $1>0 then
BEGIN
WHILE tf LOOP
var_x:=lth-var_s;
var_lgh:=div(var_div,power(10.0,var_x)); -- dividendo
result_e:=result_e+var_lgh*power(10,var_s-1);
var_div:=mod(var_div,power(10.0,var_x)); -- resto
var_s:=var_s+1;
IF var_s>lth THEN
tf:=false;
end if;
END loop;
END;
ELSE
IF $1=0 THEN
RAISE NOTICE ''The entered parameter is zero, please provide a greater
than zero value.'';
ELSE
RAISE EXCEPTION ''The entered parameter is less than zero, please
provide a greater than zero value.'';
end if;
end if;
return result_e::integer;
END;
'LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
una vez más gracias por cualquier comentario...
Carlos