文章目录
Procedure 存储过程
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
简而言之,就是数据库SQL语言层面的代码封装与重用。
创建Procedure
-- DELIMITER:定义结束标记,mysql中结束标记默认是分号
-- 将结束标记定义为$$,这样出现";"不会结束代码的运行
DELIMITER $$
CREATE
/*in:输入参数
out:输出参数
inout:输入输出参数
当输入输出的值为相同的数据类型时可以使用inout参数*/
PROCEDURE mydb.myPro1(IN i INT,OUT n VARCHAR(20))
-- 在BEGIN和END$$之间输入被封装的SQL代码
BEGIN
-- 通过INTO关键字将查询结果存入输出参数
SELECT NAME FROM students WHERE id=i INTO n;
END$$
DELIMITER ;
调用、查看和删除Procedure
调用存储过程
-- 通过CALL来调用存储过程
-- 通过"@输出参数"来获取存储过程返回值
CALL myPro1(1,@name);
-- 通过SELECT查询返回值
SELECT @name;
删除存储过程
-- DROP PROCEDURE 存储过程名称
DROP PROCEDURE mypro1;
查看存储过程
-- 查看所有的存储过程的信息
SHOW PROCEDURE STATUS;
-- 查看创建存储过程的语句
SHOW CREATE PROCEDURE myPro1;
Procedure存储具有逻辑的程序
可以在Procedure中写一些具有逻辑的的程序,比如条件、循环
IF…ELSE
DELIMITER $$
CREATE
PROCEDURE mydb.`myPro2(IN num INT,OUT str VARCHAR(20))
BEGIN
IF num=1 THEN SET str='星期一';
-- 注意ELSEIF连在一起写
ELSEIF num=2 THEN SET str='星期二';
ELSEIF num=3 THEN SET str='星期三';
ELSE SET str='输入错误';
-- 最后要结束IF语句
END IF;
END$$
DELIMITER ;
WHILE DO
DELIMITER $$
CREATE
PROCEDURE mydb.myPro3(IN num INT