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

Responder a