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';
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 |