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

create oracle function to calculate fields based on excel formula

需要一点帮助。需要在 oracle 包中创建一个函数来计算某些列。计算是根据excelsheet和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;

所以 parametr3(第 3 列)的值取决于第 1 列和第 2 列的计算总和。但是我的函数出了点问题,无法正常工作。也许使用 then WHEN CASE 不是个好主意?!

您的语法错误 - 您需要一个 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;