计算单列甲骨文
我有表如下:计算单列甲骨文
id jancuk pijut
-------------------------------
1 20 * 4
2 2 + 4
3 3 - 1 + 2
4 20/5
我想从jancuk
列更新结果列pijut
。这在使用查询的oracle中可能吗?
所以,如果表已经更新,那么这个表应该是这个样子的:
id jancuk pijut
-------------------------------
1 20 * 4 80
2 2 + 4 6
3 3 - 1 + 2 4
4 20/5 4
请帮助我。谢谢。
您可以使用功能与动态SQL来做到这一点 -
create or replace function calc_value(str in varchar2) return number is
val_ number;
begin
if str is null then
return null;
end if;
execute immediate 'begin :val_ := '||str||'; end;' using out val_;
return val_;
end;
/
和结果选择将是 -
尝试with t as
(
select 1 as id, ' 20 * 4 ' as jancuk from dual union all
select 2 as id, ' 2 + 4 ' as jancuk from dual union all
select 3 as id, ' 3 - 1 + 2 ' as jancuk from dual union all
select 4 as id, ' 20/5 ' as jancuk from dual
)
select id, jancuk, calc_value(jancuk) as pijut
from t
我可以在没有函数的单个查询中执行动态SQL吗? –
是的,还有其他答案。这只是众多解决方案之一。 – Stawros
我试过了。 '更新tbl设置pijut = calc_value(jancuk)'并给我这个错误:'PL/SQL:SQL语句被忽略' –
'jancuk'是varchar? 'pijut'是整数?此外,方程式有多复杂? –
@RaduGheorghiu是的,jancuk = varchar和pijut =数字(10,0) –
这不是一个答案,而是这个博客条目中非常接近的东西(汤姆凯特)。 http://tkyte.blogspot.com/2010/04/evaluating-expression-like-calculator.html – dmansfield