Hola Carlos: Aquí un ejemplo. Usando una simple función recursiva:
CREATE OR REPLACE FUNCTION reverse_order(var int8, rest int8) RETURNS pg_catalog.int8 AS $BODY$ DECLARE inverted int8; BEGIN if var=0 then inverted:=rest; else inverted:=reverse_order(var/10, rest * 10 + var % 10); end if; return inverted; END $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100 ; select public.reverse_order(1589,0); Saludos El jue., 25 ago. 2016 a las 19:43, Carlos T. Groero Carmona (< cton...@gmail.com>) escribió: > 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 >