MySQL必知必会

04-存储过程

2021-09-27  本文已影响0人  紫荆秋雪_文

一、创建存储过程

1、返回产品平均价格的存储过程

CREATE PROCEDURE productpricing() 
BEGIN
    SELECT
        AVG( prod_price ) AS priceaverage 
    FROM
        products; 
END;

2、MySQL命令行客户机的分隔符

DELIMITER //
CREATE PROCEDURE productpricing() 
BEGIN
    SELECT
        AVG( prod_price ) AS priceaverage 
    FROM
        products ;
END //
DELIMITER ;

二、使用存储过程

CALL productpricing();

三、删除存储过程

DROP PROCEDURE productpricing;

四、存储过程使用参数

1、变量(variable)

2、创建带有参数的存储过程

CREATE PROCEDURE productpricing(
    OUT pl DECIMAL(8, 2),
    OUT ph DECIMAL(8, 2),
    OUT pa DECIMAL(8, 2)
)
BEGIN
    SELECT MIN(prod_price)
    INTO pl
    FROM products;
    
    SELECT MAX(prod_price)
    INTO ph
    FROM products;
    
    SELECT AVG(prod_price)
    INTO pa
    FROM products;
END;

3、调用带有参数的存储过程

CALL productpricing(
@priceLow,
@priceHigh,
@priceAvg
)
SELECT @priceLow, @priceHigh, @priceAvg

五、使用 IN 和 OUT 参数的存储过程

1、创建同时带有 IN 和 OUT 参数的存储过程

CREATE PROCEDURE orderTotal(
    IN number INT,
    OUT total DECIMAL(8, 2)
)
BEGIN
    SELECT SUM(item_price * quantity)
    FROM orderitems
    WHERE order_num = number
    INTO total;
END;

2、调用同时带有 IN 和 OUT 参数的存储过程

CALL orderTotal(20005, @total)

3、显示同时带有 IN 和 OUT 参数的存储过程

SELECT @total

六、建立智能存储过程

1、获得与以前一样的订单合计,但需要对合计增加营业税,不过只针对某些顾客(条件),那么需要做下面几件事情

2、创建存储过程

CREATE PROCEDURE orderTotalAuto(
    IN number INT,
    IN taxable BOOLEAN,
    OUT ototal DECIMAL(8, 2)
)
BEGIN
    -- 申明变量 
    DECLARE total DECIMAL(8, 2);
    -- 申明 税率 6%
    DECLARE taxrate INT DEFAULT 6;
    
    -- 获取订单 总数
    SELECT SUM(item_price * quantity)
    FROM orderitems
    WHERE order_num = number
    INTO total;
    
    -- 判断是否需要税率 
    IF taxable THEN
        SELECT total + (total / 100 *taxrate) INTO total;
    END IF;
    
    SELECT total INTO ototal;
END;

3、调用没有添加税率

CALL orderTotalAuto(20005, 0, @total)
SELECT @total

4、调用添加税率

CALL orderTotalAuto(20005, 1, @total)
SELECT @total

上一篇 下一篇

猜你喜欢

热点阅读