Re: Ejecutar funciones dinámicas

From: "Julio Cesar Rodriguez Dominguez" <jurasec(at)gmail(dot)com>
To: "Andres A(dot) Mamani" <andres(dot)abel(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Ejecutar funciones dinámicas
Date: 2009-01-08 23:07:08
Message-ID: 925902880901081507i2d27869bv9ef17ab9d30e3d7a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El 8 de enero de 2009 16:19, Andres A. Mamani <andres(dot)abel(at)gmail(dot)com>escribió:

> Un saludo a todos los de la lista.
>
> En JavaScript se puede hacer lo siguiente:
> ..
> variable1 = 5;
> cadena = ' variable1 + 5';
> resultado = eval(cadena);
> ...
> el resultado es que se asigna a resultado = 10, la ejecución de la
> suma entre la variable1 +5; mi pregunta es si se puede hacer algo
> parecido en PostgreSql? en particular en pl/pgsql, sé que se puede
> hacer lo siguiente:
>
> variable1=5;
> cadena = variable1::varchar||'+ 5';
> execute cadena;
>
> Sin embargo tengo el incoveniente de que el nombre de las varibles
> estan almacenados en tablas y los valores de estas variables tambien
> son dinámicos algo como:
>
> variable | valor
> ---------------------------------
> var1 | 5
> var2 | var1 +10
> var3 | var2 - 1
>
> Alguna sugerencia?... de antemano gracias.
>
> Abel
>

create or replace function sumar() returns integer as $$
declare
res int;
variable1 int;
begin
variable1 =5;
execute 'select '||variable1||' + 5' into res;
return res;
end;
$$ language 'plpgsql';

Para poder tener en una tabla las variables con sus respectivos valores
dinámicos, se me ocurre que la columna valor se divida en dos columnas,
quedando de tal manera así:

variable | var | constante
------------------------------------------------
var1 | 0 | 5
var2 | var1 | 10
var3 | var2 | -1

y con una función recursiva, calcular el valor de las variables:

create or replace function calcular_valor(var_ text) returns int as $$
declare
res int;
nueva_var text;
parte_variable text;
parte_constante int;
begin
select into parte_variable,parte_constante var,constante from valores
where variable like var_;
if parte_variable = '0' then
return parte_constante;
else
execute 'select var from valores where variable like '''||var_||''''
into nueva_var;
return calcular_valor(nueva_var)+parte_constante;
end if;
return res;
end;
$$ language 'plpgsql';

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message inf200476 2009-01-09 03:03:35 Manual de PL/pgSQL
Previous Message Andres A. Mamani 2009-01-08 22:19:31 Ejecutar funciones dinámicas