2015-10-05 89 views
1

我有表如下:计算单列甲骨文

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 

请帮助我。谢谢。

+1

'jancuk'是varchar? 'pijut'是整数?此外,方程式有多复杂? –

+0

@RaduGheorghiu是的,jancuk = varchar和pijut =数字(10,0) –

+0

这不是一个答案,而是这个博客条目中非常接近的东西(汤姆凯特)。 http://tkyte.blogspot.com/2010/04/evaluating-expression-like-calculator.html – dmansfield

回答

2

update tbl 
set "pijut" = xmlquery(replace("jancuk", '/', ' div ') returning content).getNumberVal(); 

欲了解更多信息link

+0

感谢Praven,但我得到这个错误:'[Err] ORA-19112:在评估过程中出现错误:无法获取jancuk字符串' –

+0

Zacurned Ace,尝试从查询中删除双引号 – Stawros

+0

你有任何'null'值列'jancuk' – Praveen

2

您可以使用功能与动态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 
+0

我可以在没有函数的单个查询中执行动态SQL吗? –

+1

是的,还有其他答案。这只是众多解决方案之一。 – Stawros

+0

我试过了。 '更新tbl设置pijut = calc_value(jancuk)'并给我这个错误:'PL/SQL:SQL语句被忽略' –