• MySQL 存储过程入门


    存储过程是带有逻辑的SQL语句,优点是执行效率高。缺点是可移植性差

    1、存储过程语法

    DELIMITER $  --声明结束符
    CREATE PROCEDURE pro_test()  --创建存储过程    存储过程名称(参数列表)
    BEGIN
        SELECT * FROM employee  --可以写多条SQL语句   SQL语句+流程控制
    END $ --结束

    2、调用存储过程

    CALL pro_test  --CALL 存储过程名称

    3、储存过程参数

    IN            表示输入参数

    OUT         表示输出参数

    INOUT     表示输入、输出参数

    3.1带有输入参数的存储过程

    需求:通过传入一个员工的id,查询员工信息

    DELIMITER $
    CREATE PROCEDURE pro_findById(IN eid INT)   --IN: 输入参数
    BEGIN
        SELECT * FROM employee WHERE id = eid;
    END $

    调用

    CALL pro_findById(2);

    3.2 带有输出参数的存储过程

    DELIMITER $
    CREATE PROCEDURE pro_testOut (OUT str VARCHAR(20))
    BEGIN 
        SET str="这是一个输出参数";
    END $

    调用带返回参数的存储过程

    先介绍下MySQL变量
    1、全局变量(内置变量)
        查看所有全局变量 show variables
       查看跟字符集有关的全局变量 SHOW VARIABLES LIKE 'character_%';
       查看某个全局变量 SELECT @@变量名
    修改全局变量 SET 变量名=新值
    常用全局变量
    --character_set_client : mysql服务器能够接收数据的编码 --character_set_results : mysql服务器输出数据的编码
    2、会话变量:只存在于当前的客户端与数据库服务器端的一次连接当中,如果连接断开,会话丢失
      定义一个会话变量 SET @变量=值
      查看会话变量 SELECT @变量
    3、局部变量:在存储过程中使用的变量 就是存储变量,只存储过程执行完毕,那么局部变量就会消失。

    变量介绍完,现在说明如何调用带输出参数的存储过程
    1、定义一个会话变量
    CALL pro_testOut(@NAME) //1)定义一个会话变量NAME,2)使用NAME会话变量
    2、查看会话变量
    SELECT @NAME;

    3.3带有输入输出参数的存储过程

    DELIMITER $
    CREATE PROCEDURE pro_testInOut(INOUT n INT)   --INOUT输入输出参数
    BEGIN 
        SELECT n;   --作为输入参数传入存储过程,  该变量变为局部变量 不用加'@',但在存储过程外仍然是会话变量
        SET n = 500;
    END $
    
    --调用
    输入
    SET @n = 10;    
    CALL pro_testInOut(@n);  --结果输出10
    
    
    输入
    SELECT @n; --结果输出500

    4、带有条件判断的存储过程

    需求:输入一个整数。如果为1,则返回“星期一”,如果是2,则返回“星期二”,如果是3,则返回“星期三”。如果 是其他数值,返回“错误的数值”

    DELIMITER $
    CREATE PROCEDURE pro_testIf(IN num INT, OUT str VARCHAR(10))
    BEGIN
        IF num = 1 THEN 
            SET str="星期一";
        ELSEIF num = 2 THEN
            SET str = "星期二";
        ELSEIF num = 3 THEN
            SET str = "星期三";
      ELSE SET str = "输入的值不在指定范围内";
    END IF; END $ --调用 CALL pro_testIF(1, @str); SELECT @str;

    5、带有循环功能的存储过程

    --需求:输入一个整数,求和。例如输入100.求1-100的和

    DELIMITER $
    CREATE PROCEDURE pro_testWhile(IN num INT, OUT result INT)
    BEGIN
        --定义一个局部变量
        DECLARE i INT DEFAULT 1;
        DECLARE vsum INT DEFAULT 0;
        WHILE i<=num DO
            SET vsum = vsum + i;
            SET i = i+1;
        END WHILE;
        SET result = vsum;
    END $ 
    
    
    --调用
    CALL pro_testWhile(100, @result);
    
    SELECT @result;

    6、使用查询结果作为返回值

    DELIMITER $
    CREATE PROCEDURE pro_findById(IN eid INT, OUT vnaem VARCHAR(20))
    BEGIN
        SELECT empName INTO vname FROM employee WHERE id = eid;
    END $
    
    --调用
    CALL pro_findByID(1, @NAME);
    
    SELECT @NAME

     7、删除存储过程

    DROP PROCEDURE 存储过程名称
  • 相关阅读:
    lua面向对象(定义与调用)
    luastring(字符串)
    luatable(表)
    lua面向对象(创建与实例化)
    pandas安装方法(常规安装失败解决方法)
    lua循环
    windows常用命令schtasks
    ios UI自动化 appium参数配置
    ios UI自动化环境配置
    jmeter进行websocket 通信
  • 原文地址:https://www.cnblogs.com/StanLong/p/6864558.html
Copyright © 2020-2023  润新知