Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何计算具有相同id的行的总和?_Oracle_Plsql - Fatal编程技术网

Oracle 如何计算具有相同id的行的总和?

Oracle 如何计算具有相同id的行的总和?,oracle,plsql,Oracle,Plsql,我需要创建一个函数,返回产品的最终收益。我的问题是,对于每个需要10天以上处理的产品,我必须在产品价格上加上(天*0.0001)。许多顺序ID有不同的乘积ID。我想不出在同一个函数中实现这一点的方法。我必须在哪里添加乘法?数据库模式如下所示 我尝试了双循环,我尝试了求和,但这些都不起作用 CREATE OR REPLACE FUNCTION get_gain(orderID NUMBER) RETURN NUMBER AS total_price NUMBER; t

我需要创建一个函数,返回产品的最终收益。我的问题是,对于每个需要10天以上处理的产品,我必须在产品价格上加上(天*0.0001)。许多顺序ID有不同的乘积ID。我想不出在同一个函数中实现这一点的方法。我必须在哪里添加乘法?数据库模式如下所示

我尝试了双循环,我尝试了求和,但这些都不起作用

CREATE OR REPLACE FUNCTION get_gain(orderID NUMBER)
  RETURN NUMBER
  AS
    total_price   NUMBER;
    total_cost    NUMBER;
    gain    NUMBER;

    Cursor cur1 IS
    SELECT SUM(PRICE) AS "Total PRICE"
    FROM ORDERS
    WHERE ORDER_ID=orderID;
    Cursor cur2 IS
    SELECT SUM(COST) AS "Total COST"
    FROM ORDERS
    WHERE ORDER_ID=orderID;

BEGIN
   OPEN cur1;
   FETCH cur1 INTO total_price;
   CLOSE cur1;
   OPEN cur2;
   FETCH cur2 INTO total_cost;
   CLOSE cur2;
   gain := total_price - total_cost;
   RETURN gain;

END;

您可以使用以下方法构造查询。我相信这次手术不需要任何功能

SELECT
  ORDER_ID,
  ...
  CASE WHEN DAYS_TO_PROCESS > 10 THEN
     PRICE + DAYS_TO_PROCESS * 0.0001 
  ELSE
     PRICE
  END AS PRICE
FROM table1
WHERE ...

现在还不清楚你想要实现什么。请提供更多详情

下面是更新产品价格的函数示例

CREATE OR REPLACE FUNCTION UpdatePrice(orderID NUMBER)
  RETURN NUMBER
  AS
    total_price   NUMBER;
    total_cost    NUMBER;
    gain    NUMBER;
BEGIN
  UPDATE table1 
  SET PRICE = 
    CASE WHEN DAYS_TO_PROCESS > 10 THEN
       PRICE + DAYS_TO_PROCESS * 0.0001 
    ELSE
       PRICE
    END
  WHERE ORDER_ID = p_ORDER_ID;
END;

请发布一个包含表定义、示例数据和预期输出的列表。谢谢,谢谢!正如我的教授所说,它必须是一个函数。