您的位置:首页 > 数据库 > MySQL

Mysql_知识总结04(存储过程的建立、调用)

2018-03-23 18:51 676 查看
-- 数据库的存储过程
-- 定义一个结束符号:delimiter $
DELIMITER $
CREATE PROCEDURE testByPro()
BEGIN
    -- 书写sql语句
    SELECT *FROM dept;
END $
-- 调用存储过程
CALL testByPro();

DELIMITER $
CREATE PROCEDURE testByPro03()
BEGIN
    -- select *from dept;
    SELECT *FROM employee;
END $
CALL testByPro03();

-- 带有参数的存储过程
-- 需求:插入员工id,查询对应的员工
DELIMITER $
CREATE PROCEDURE pro_testByIn(IN eid INT)
-- 存储过程名称(形式参数:参数类型+参数名称+字段类型)
BEGIN
    SELECT *FROM employee WHERE id = eid;
END $
-- 调用
CALL pro_testByIn(2);

-- 带有输出参数的存储过程(输出参数)
DELIMITER $
CREATE PROCEDURE pro_testByOut(OUT n VARCHAR(20))
BEGIN
    -- 在存储过程中:局部变量 修改局部变量 set 数据
    SET n = '大家好,为什么你们还不回我微信' ;
END $
-- 调用带有参数的存储过程
CALL pro_testByOut(@n); -- 带出来一个会话变量
-- 执行了存储过程,@n已经有数据了
-- 查询会话变量
SELECT @n;

-- 数据库中的全局变量分为三种
-- 1)数据库中的全局变量:当前mysql一启动,mysql就会有一些全局变量,常驻内存的!
-- 全局变量共有331条数据
-- 显示当前mysql数据库的全局变量
SHOW VARIABLES;
-- 模糊条件查询跟字符集相关的变量
SHOW VARIABLES LIKE 'character%';
-- 2)会话变量(实际的存储过程中,应用的会话变量最多)
-- 会话变量在登录mysql客户端设置一些会话变量,一旦客户端关闭,会话变量就失效了
-- 3)局部变量
-- 在存储过程中定义的变量

-- 带有输入输出参数的存储过程(inout 后面参数名称:既可以携带到存储过程中,也可以通过会话变量查看)
DELIMITER $
CREATE PROCEDURE testByInOut(INOUT n VARCHAR(20))
BEGIN
    -- 先查看局部变量
    SELECT n;
    -- 修改变量
    SET n = '500';
END $

-- 给n初始值
SET @n='10';
CALL testByInOut(@n);
-- 现在查看n的值
SELECT @n;

-- 带有条件判断语句的存储过程
DELIMITER $
CREATE PROCEDURE testByIf(IN n INT,OUT str VARCHAR(20))
BEGIN
    IF n=1 THEN
        SET str = 'sunday&monday';
    ELSEIF n=2 THEN
        SET str = 'tuesday&weddnesday';
    ELSEIF n=3 THEN
        SET str = 'thursday&friday&saturday';
    ELSE
        SET str = 'error!';
    END IF;
END $
-- 调用存储过程
CALL testByIf(3,@str);
CALL testByIf(5,@str);
-- 查看
SELECT @str;

-- 带有循环语句的存储过程
-- 插入一个num值,求1到num的和
DELIMITER $
CREATE PROCEDURE testByWhile(IN num INT,OUT score INT)
BEGIN
 DECLARE result INT DEFAULT 0;
 DECLARE i INT DEFAULT 1;
 WHILE i<= num DO
    SET result = result +i; -- 修改局部变量
    SET i = i + 1;
END WHILE;
    SET score = result; -- 相当于return语句
END $

-- 调用存储过程
CALL testByWhile(200,@score);
SELECT @score;

-- 携带数据库中的数据给输出参数(into)
-- 需求:传入员工id,查询对应的员工,输出员工的姓名
DELIMITER $
CREATE PROCEDURE testByInto(IN eid INT,OUT sname VARCHAR(20))
BEGIN
    SELECT NAME INTO sname FROM employee WHERE id = eid;
END $
-- 调用
CALL testByInto(3,@sname);
SELECT @sname;

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息