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

From: José Hurtado <jhurtadom(at)gmail(dot)com>
To: Daymel Bonne Solís <daymelbonne(at)gmail(dot)com>
Cc: "Carlos T(dot) Groero Carmona" <ctonetg(at)gmail(dot)com>, Lista PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Ayuda con función...
Date: 2016-08-26 09:31:19
Message-ID: CAOF-YQCW2a4WpqS-_3HhUbYxzTAv0fASvM6knEDv7+e7_m01nw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola,
Esta sería una opción sin hacer llamada recursiva:

CREATE OR REPLACE FUNCTION public.reversa
(
IN origen integer
)
RETURNS integer AS
$$
DECLARE
resultado integer;
BEGIN
resultado := 0;
WHILE (origen > 0)
LOOP
resultado := (resultado * 10) + (origen % 10);
origen := origen / 10;
END LOOP;
return resultado;
END;
$$
LANGUAGE 'plpgsql';

Un saludo.

El 26 de agosto de 2016, 3:13, Daymel Bonne Solís <daymelbonne(at)gmail(dot)com>
escribió:

> 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

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Eduardo Morras 2016-08-26 10:18:51 Re: Estructura tipo diccionario o hashset
Previous Message José Hurtado 2016-08-26 09:02:04 Re: Estructura tipo diccionario o hashset