2015-02-05 53 views
1

需要一點幫助。需要在oracle包內創建一個函數來計算一些列。計算基於excel表格,excel公式爲=IF(A1=1,A2*0.1,IF(A1=2,A2*0.2,IF(A1=3,A2*0.4,IF(A1=4,A2*0.6,IF(A1=5,A2*0.8,)))))以獲得列值。所以我想在oracle的函數中進行這些計算。到目前爲止,我有如下因素:創建oracle函數根據excel計算字段公式

FUNCTION GET_COST( p_parametr1 IN NUMBER DEFAULT NULL, p_parametr2 IN NUMBER DEFAULT NULL, p_parametr3 IN NUMBER DEFAULT NULL ) RETURN NUMBER AS BEGIN CASE WHEN p_parametr1 = 1 THEN p_parametr2 * 0.1 WHEN p_parametr1 = 2 THEN p_parametr2 * 0.2 WHEN p_parametr1 = 3 THEN p_parametr2 * 0.4 WHEN p_parametr1 = 4 THEN p_parametr2 * 0.6 WHEN p_parametr1 = 5 THEN p_parametr2 * 0.8 ELSE RETURN NULL END CASE; END GET_COST;

所以parametr3(列3)值在第1列和第2列。但是很多事情取決於計算的總和不對我的功能,只是不會工作。也許使用然後WHEN CASE是壞主意?!

回答

3

你的語法是錯誤的 - 你需要爲整個表達式return聲明:

CREATE OR REPLACE 
FUNCTION GET_COST(
    p_parametr1 IN NUMBER DEFAULT NULL, 
    p_parametr2 IN NUMBER DEFAULT NULL, 
    p_parametr3 IN NUMBER DEFAULT NULL 
) RETURN NUMBER 
AS 
    BEGIN 
    RETURN CASE 
    WHEN p_parametr1 = 1 THEN p_parametr2 * 0.1 
    WHEN p_parametr1 = 2 THEN p_parametr2 * 0.2 
    WHEN p_parametr1 = 3 THEN p_parametr2 * 0.4 
    WHEN p_parametr1 = 4 THEN p_parametr2 * 0.6 
    WHEN p_parametr1 = 5 THEN p_parametr2 * 0.8 
    ELSE NULL 
END; 
END GET_COST; 
+0

'case' _expressions_被終止,只有'end'; 'end case'只適用於'case' _statements_。 – collapsar 2015-02-05 18:05:30

+0

Yikes!複製粘貼錯誤。感謝您的注意 – Mureinik 2015-02-05 18:17:05

+0

感謝很多男士,作爲一種魅力! – USSR 2015-02-06 13:46:45