需要一些帮助。需要在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是个坏主意?!
答案 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;