我需要创建一个返回产品最终收益的函数。我的问题是,对于每个需要花费超过10天才能处理的PRODUCT_ID,我都必须在产品价格上加上(天* 0.0001)。许多ORDER_ID具有不同的PRODUCT_ID。我想不出在同一函数中执行此操作的方法,我必须在哪里添加乘法?数据库模式就是这样
我尝试了双循环,并尝试了SUM,但是这些都不起作用。
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;
答案 0 :(得分:1)
您可以使用以下方法来构造您的查询。我相信您将不需要任何功能
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;