MySql–存储过程
创建
DELIMITER $$ -- 代表执行分隔符(原来是;这里重新定义为$$)
USE `furn_ssm`$$ -- 存储过程建立在数据库下,这里指使用数据库furn_ssm
DROP PROCEDURE IF EXISTS `p1`$$ -- 这里保证删去同名存储过程,如果存在的话
CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(IN a INT, IN b INT, OUT c INT)
BEGIN
SET c = a + b;
END$$
DELIMITER ; -- 代表执行分隔符(这里重新恢复为;)
######################################################## 分割线
DELIMITER $$
USE `furn_ssm`$$
DROP PROCEDURE IF EXISTS `p2`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `p2`(IN a INT, OUT r INT)
BEGIN
DECLARE `x` INT DEFAULT 0; -- 定义局部变量x,默认值为0
DECLARE `y` INT DEFAULT 0; -- 定义局部变量y,默认值为0
SET `x` = a*a;
SET `y` = a/2;
SET r = `x`+`y`;
END$$
DELIMITER ;
######################################################## 分割线
DELIMITER $$
USE `furn_ssm`$$
DROP PROCEDURE IF EXISTS `p3`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `p3`(OUT `sum` INT) -- 输入输出可以标记为inout,标识为即可输入,又可输出
BEGIN
SELECT COUNT(id) INTO `sum` FROM furn; -- 通过into来赋值
END$$
DELIMITER ;
使用
-- 使用p1
SET @m = 0; -- 定义用户变量
CALL p1(3,2,@m); -- 使用存储过程
SELECT @m FROM DUAL; -- 显示结果
-- 使用p2
SET @mm = 0;
CALL p2(6,@mm);
SELECT @mm FROM DUAL;
-- 使用p3
SET @mmm = 0;
CALL p2(6,@mm);
SELECT @mm FROM DUAL;
执行控制
分支语句
-- 单分支
if conditions then
--SQL
end if;
-- 双分支
if conditions then
--SQL
else
--SQL
end if;
-- 多分支
case 变量
when conditions then
--SQL
when conditions then
--SQL
when conditions then
--SQL
when conditions then
--SQL
else
--SQL
end case;
循环语句
-- while
declare i int;
set i = 0;
while i<3 do
--SQL
set i = i + 1;
end while;
-- repeat
declare i int;
set i = 0;
repeat
--SQL
set i = i + 1
until i > 3 end repeat;
-- loop
declare i int;
set i = 0;
myloop:loop
-- SQL
set i = i + 1
if i = 3 then
leave myloop;
end if;
end loop;
查询、修改、删除
-- 查询指定数据库下的存储过程
SHOW PROCEDURE STATUS WHERE db='furn_ssm'
-- 查询存储过程的创建细节
SHOW CREATE PROCEDURE furn_ssm.p1
-- 修改存储过程的是修改存储过程的特征
alter procedure <proc_name> 特征1 [特征2 特征3 ....]
-- 具体特征和使用自行百度
-- 删除
drop procedure furn_ssm.p1
游标(结果集)
-- 语法,声明游标并指向一个结果集
declare cursor_name cursor for select_statement;
参考链接
https://www.csdn.net/tags/OtDaIg5sMDUxMy1ibG9n.html
https://www.cnblogs.com/wjoyxt/p/5420582.html
https://www.bilibili.com/video/BV1qb4y1Y722
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/database/280792.html