2015-10-05 122 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語句被忽略' –