Re: [pgsql-es-ayuda] Ayuda con función...

From: Daymel Bonne Solís <daymelbonne(at)gmail(dot)com>
To: "Carlos T(dot) Groero Carmona" <ctonetg(at)gmail(dot)com>, Lista PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Ayuda con función...
Date: 2016-08-26 01:13:35
Message-ID: CADGXAPgVvMMQ2YLLrU5V-MFwnWcAUJtmg5nYJMavMxT56AbF-g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 (<
ctonetg(at)gmail(dot)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
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Anthony Sotolongo 2016-08-26 01:14:51 Re: Ayuda con función...
Previous Message Carlos T. Groero Carmona 2016-08-26 00:42:38 Ayuda con función...