我想(添加p.L_VALUE和p.I_VALUE并使用此结果,减去c.con_value)将一列减去另一列中的另一列,下面的函数成功编译但减法结果不正确:
答案 0 :(得分:0)
对各个表的值求和,然后将它们交叉连接(而不是交叉连接它们,然后求和,这将创建重复值)。您在查询后也错过了分号。
FUNCTION CF_OP_VALFormula RETURN NUMBER
IS
V_QTY NUMBER(13);
BEGIN
SELECT p.total - c.total
INTO V_QTY
FROM ( SELECT sum(nvl(L_VALUE, 0)) + sum(nvl(I_VALUE, 0)) AS total
FROM raw_purchase ) p
CROSS JOIN
( SELECT sum(nvl(c.CON_VALUE, 0)) AS total
FROM raw_consum ) c;
RETURN v_qty;
END;
/
答案 1 :(得分:0)
一种解决方案是使用子查询分别计算每个表的列总和:
function CF_OP_VALFormula return number is
v_qty number(13);
begin
select (select nvl(sum(l_value), 0) + nvl(sum(i_value), 0) from raw_purchase) -
(select nvl(sum(con_value), 0) from raw_consum)
into v_qty
from dual;
return v_qty;
end;
注意:您不需要在每一行使用nvl
- 您可以在计算总和后使用它。这会加速一些事情。