【发布时间】:2023-04-04 19:11:01
【问题描述】:
我希望我的函数价格数据从客户那里获取 ID,并为每件商品制定特价。 示例:
- cust_id | item_id |价格
- 30 14 11
- 30 25 4
- 31 14 12
- 31 25 6
CREATE OR REPLACE FUNCTION PRICE_DATA(
P_CUST_DATA_ID CUSTOMERS.CUSTOMERS_ID%TYPE,
P_ITEMS_DATA_ID ITEMS.ITEMS_ID%TYPE)
RETURN NUMBER AS
L_PRICE NUMBER;
BEGIN
dbms_random.seed(1000);
FOR i IN(SELECT CUSTOMERS_ID FROM CUSTOMERS) LOOP
FOR i IN(SELECT ITEMS_ID FROM ITEMS) LOOP
L_PRICE := ADD_PRICELIST(P_CUST_DATA_ID,
P_ITEMS_PRIC_ID,
ROUND(dbms_random.value(0,10),3));
END LOOP;
END LOOP;
RETURN L_PRICE;
END PRICE_DATA;
我运行这个脚本:
DECLARE
L_PRICE_ID NUMBER;
BEGIN
DELETE FROM PRICE;
L_PRICE_ID := PRICE_DATA;
END;
我在价格数据中收到 PLS-00306 错误
【问题讨论】:
-
PLS-00306:参数数量或类型错误。您在此处调用函数 PRICE_DATA:
L_PRICE_ID := PRICE_DATA;。该函数虽然定义了两个参数P_CUST_DATA_ID和P_ITEMS_DATA_ID。所以你必须打一个像L_PRICE_ID := PRICE_DATA(123, 456);这样的电话。 -
您为什么要遍历所有客户和所有商品以获得客户/商品组合的价格?