El 8 de enero de 2009 16:19, Andres A. Mamani <[email protected]>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';