You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PL/SQL存储过程创建随机函数,为客户商品组合生成价格表随机条目

实现方案

你用到的%type是Oracle PL/SQL的专属语法,以下以Oracle环境为例实现需求:

核心执行代码

直接运行下面的PL/SQL块即可批量为所有客户+商品的组合插入随机价格:

DECLARE
    -- 随机价格取值范围,可按需修改,示例为10~1000的两位小数价格
    v_min_price CONSTANT NUMBER := 10;
    v_max_price CONSTANT NUMBER := 1000;
BEGIN
    -- 遍历所有客户和商品的笛卡尔积组合
    FOR rec IN (
        SELECT c.id AS cust_id, i.id AS items_id
        FROM customers c
        CROSS JOIN items i
        -- 可选过滤:排除价格表中已存在的组合,避免重复插入
        WHERE NOT EXISTS (
            SELECT 1 FROM price_table p 
            WHERE p.cust_id = c.id AND p.items_id = i.id
        )
    ) LOOP
        -- 生成随机价格,调用已有存储过程插入数据
        add_price(
            cust_id => rec.cust_id,
            items_id => rec.items_id,
            price => ROUND(v_min_price + DBMS_RANDOM.VALUE * (v_max_price - v_min_price), 2)
        );
    END LOOP;
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        RAISE;
END;
/

注意事项

  • 不需要两位小数格式的价格可以去掉ROUND函数,价格范围修改v_min_price和v_max_price的数值即可
  • 如果你的价格表没有唯一约束限制客户+商品组合重复,建议保留NOT EXISTS过滤逻辑
  • 执行前建议先运行下面的查询验证待插入的组合数量是否符合预期,避免误插数据:
SELECT COUNT(*) 
FROM customers c
CROSS JOIN items i
-- 对应上面的过滤条件,没有的话可以删掉WHERE部分
WHERE NOT EXISTS (
    SELECT 1 FROM price_table p 
    WHERE p.cust_id = c.id AND p.items_id = i.id
);
  • 如果是MySQL等其他数据库,将随机生成函数替换为对应数据库的函数(MySQL为RAND()),遍历逻辑改为游标或INSERT SELECT调用存储过程即可。

内容的提问来源于stack exchange,提问作者GEO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:06:05