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

基于指定数据库表创建存储函数productPerOrder与触发器changeCustomer_Category

SQL功能实现方案

基础表结构说明

你提供的4张表关联逻辑如下:

  • Customer:存储客户基础信息,customerNO为主键
  • Product:存储商品基础信息,productNO为主键
  • CustomerOrder:存储订单基础信息,orderNO为主键,customerNO为关联Customer的外键
  • OrderedProduct:存储订单关联的商品明细,orderNO、productNO为联合外键,分别关联订单表和商品表

1. 存储函数productPerOrder实现

功能说明:接收订单号作为入参,返回该订单下所有商品的下单总数量,无对应订单时返回0。
以下为MySQL语法实现,其他数据库仅需调整语法关键字即可:

-- 调整分隔符,避免函数内部的分号被提前识别为语句结束
DELIMITER //
CREATE FUNCTION productPerOrder(in_orderNO INT)
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE total_count INT DEFAULT 0;
    -- 聚合统计对应订单的商品数量总和
    SELECT IFNULL(SUM(orderQuantity), 0) INTO total_count
    FROM OrderedProduct
    WHERE orderNO = in_orderNO;
    RETURN total_count;
END //
-- 恢复默认分隔符
DELIMITER ;

注:如果你的orderNO字段类型为字符串,只需把入参in_orderNO的类型调整为对应VARCHAR长度即可。
调用示例:SELECT productPerOrder(1001); 即可查询订单号为1001的商品总数量。


2. 触发器changeCustomer_Category实现

功能说明:Customer表的custBalance字段更新前触发,当更新后客户余额低于-10000时,自动调整客户category:B2改B1、C2改C1。

DELIMITER //
CREATE TRIGGER changeCustomer_Category
BEFORE UPDATE ON Customer
FOR EACH ROW
BEGIN
    -- 仅当custBalance字段被修改、且新余额低于阈值时执行逻辑,避免无效触发
    IF NEW.custBalance < -10000 AND OLD.custBalance != NEW.custBalance THEN
        CASE NEW.category
            WHEN 'B2' THEN SET NEW.category = 'B1';
            WHEN 'C2' THEN SET NEW.category = 'C1';
            -- 其他category值不做修改
        END CASE;
    END IF;
END //
DELIMITER ;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:04