【问题标题】:create oracle function to calculate fields based on excel formula创建oracle函数以根据excel公式计算字段
【发布时间】:2015-04-05 14:54:04
【问题描述】:

需要一点帮助。需要在 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;

因此,parametr3(第 3 列)的值取决于第 1 列和第 2 列中的计算总和。但是我的函数有问题,无法正常工作。也许使用 WHEN CASE 是个坏主意?!

【问题讨论】:

    标签: sql oracle select case


    【解决方案1】:

    您的语法错误 - 您需要为整个表达式添加 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;
    

    【讨论】:

    • case 表达式仅以end结尾; end case 仅适用于 case 语句
    • 哎呀!复制粘贴错误。感谢您的关注
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2011-03-06
    • 2022-11-29
    • 1970-01-01
    相关资源
    最近更新 更多