创建oracle函数,根据excel公式计算字段

时间:2015-02-05 16:36:17

标签: sql oracle select case

需要一些帮助。需要在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的函数中进行这些计算。到目前为止,我有以下内容:

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;

因此,参数3(第3列)的值取决于第1列和第2列中的计算总和。但是我的功能出了问题而且不起作用。也许使用那么WHEN CASE是个坏主意?!

1 个答案:

答案 0 :(得分: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;