• 《mysql必知必会》读书笔记存储过程的使用


    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做《MySQL必知必会》,看了之后对MySQL的高级用法有了一定的了解。以下内容只当读书笔记。

    如有转载请注明出处~

    存储过程的使用

    执行存储过程

    CALL productpricing()

      执行名为productpricing的存储过程

    创建存储过程

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

      注意:如果使用mysql的命令行程序,";"是分隔符,存储过程中也有";"这样会造成使用存储过程中的SQL出现语法错误,解决办法是临时更改语句的分隔符:

    DELIMITER //
    ....
    DELIMITER ;

      其中,除了\ 之外,任何字符都可以用作语句分隔符

    删除存储过程

    DROP PROCEDURE productpring;

      只是给出存储过程的名字,不用跟()

    存储过程参数的使用

    --创建存储过程
    CREATE PROCEDURE ordertotal(
    IN onumber INT,
    OUT ototal DECIMAL(8,2)
    )
    BEGIN
    SELECT sum(item_price*quantity)
    FROM orderitems
    WHERE order_num = onumber
    INTO ototal;
    END;
    --调用
    CALL ordertotal(234567, @total)
    --显示结果
    SELECT @total

    智能存储过程 

      前面的存储过程只是为了解及学习使用,实际应用中的存储过程不是像上面的一样简单。如下是一较为复杂的存储过程:

    -- 创建一个名为ordertotal的存储过程
    -- 参数:onumber-订单号 taxable-是否上税(0,不需要 1,需要) ototal-返回的合计
    CREATE PROCECURE ordertotal(
    IN onumber INT,
    IN taxable BOOLEAN,
    OUT ototal DECIMAL(8,2)
    ) COMMENT 'Obtain order total, optionally adding tax'
    BEGIN
    -- 定义临时变量total-存储查询到的合计
    DECLARE total DECIMAL(8,2)
    -- 临时变量taxrate-税点
    DECLARE taxrate INT DEFAULT 6;
    
    -- 得到查询的合计
    SELECT Sum(item_price * quantity) 
    FROM orderitems
    WHERE order_num = onumber
    INTO total;
    
    -- 判断是否需要上税
    IF taxable THEN
    -- 需要,将上税部分添加进合计
    SELECT total+(total/100*taxrate) INTO total;
    END IF;
    -- 将最终的合计返回
    SELECT total INTO ototal;
    END;
  • 相关阅读:
    linux 命令行远程登录 后台运行命令的方法
    再议perl写多线程端口扫描器
    perl 函数参数传递与返回值(一)
    Linux 删除带有特殊字符的文件
    桌面云的四大协议解析
    RemoteBox 1.6 发布,VirtualBox 管理工具
    gsoap
    Open Compute Project
    基于 Arduino 开发板,这款插座是可编程且开源的
    minnowboard
  • 原文地址:https://www.cnblogs.com/wulaa/p/7768069.html
Copyright © 2020-2023  润新知