2015-02-05 218 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